2010-06-16 4 views
2

Je suis en train d'écrire une application que je prévois de vendre en mode SaaS. Sans donner de "secrets", je peux dire qu'il s'agit essentiellement d'un "système d'édition de documents" dans lequel de nombreux utilisateurs soumettront des documents.Système de connexion entièrement personnalisé dans Django?

Le heirarchy de base est la suivante:

  • Institution
  • individuel
  • document
  • Sous-documents

Ainsi, chaque individu devrait être en mesure de parcourir tous les documents qui ont été soumis par n'importe qui dans leur institution, mais devrait seulement pouvoir éditer des documents qu'ils ont créés.

Aucun individu ne devrait même être conscient de l'existence d'une autre institution - cela devrait être complètement caché.

J'ai écrit une classe Django/Python qui faciliterait cela, mais chaque document concernant l'authentification que j'ai lu nécessite que j'utilise l'objet Utilisateur. Est-ce juste une limitation de Django ou existe-t-il un moyen de le faire?

S'il y a un moyen, comment puis-je obtenir mes propres détails de classe "Individuelle" attachés aux objets "demande" afin que je puisse valider les choses que je devrais montrer aux utilisateurs?

Répondre

1

Le module auth est généralement utilisé pour couvrir les cas d'authentification. Vous donne des groupes (institutions), des utilisateurs (particuliers) et des autorisations. En utilisant ces fonctions, vous pouvez vérifier si un utilisateur est membre d'un groupe ou s'il possède un document avant de lui permettre de voir ou de modifier le document.

http://docs.djangoproject.com/en/dev/topics/auth/

Si vous avez besoin d'aller au-delà du cas d'utilisation typique, supportant LDAP par exemple, vous pouvez regarder écrire votre propre backend d'authentification.

http://docs.djangoproject.com/en/dev/topics/auth/#other-authentication-sources

3

Ce que vous cherchez est l'autorisation, pas l'authentification. Le système d'autorisation intégré de Django est assez grossier, comme vous l'avez découvert. Vous aurez besoin de quelque chose comme django-authority si vous voulez une solution plus complète.

0

En général, si vous avez besoin d'attacher plus d'informations au modèle User builtin, vous créer un nouveau modèle qui sous-classes models.Model (non User), et identifier les paramètres comme dans AUTH_PROFILE_MODULE. Vous pouvez obtenir l'instance appropriée de votre modèle auprès d'un user en appelant le user.get_profile(). (voir http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users). Ceci est généralement utile pour ajouter des champs supplémentaires à l'utilisateur tels que l'adresse, les informations de contact, etc. Bien qu'il soit possible de l'utiliser pour vos besoins d'authentification, vous feriez mieux d'utiliser les groupes intégrés, ou une solution plus globale comme Django-Authority comme d'autres l'ont mentionné. J'ai inclus cette réponse seulement parce qu'elle semble être ce que vous demandiez (un moyen d'attacher une classe à User), mais pas vraiment ce dont vous avez besoin (autorisation).

Questions connexes