2010-02-18 4 views
1

Je crée une application multi-locataire qui n'utilisera pas l'Admin Django standard (sauf pour un usage interne qui aura accès à tous les locataires ... c'est assez simple). J'essaie de créer un système d'autorisation personnel et je ne suis pas intéressé par l'utilisation du modèle User standard (ou du modèle d'application intégré). Mon application aura des comptes, et chaque compte aura des administrateurs (a dû utiliser Administrator vs User à des fins de conflit de noms). Ces utilisateurs s'authentifieront en utilisant mon propre système entièrement personnalisé. Est-ce tout faux? Est-ce que/je peux toujours utiliser le système d'authentification de Django dans une situation multi-tennant qui utilise ma propre interface personnalisée (comme mentionné avant que je ne permette pas aux détenteurs de compte d'utiliser l'interface Admin par défaut). Y a-t-il des implications de sécurité dans l'utilisation de mon propre système ou est-ce que les éléments de sécurité standard de Django comme la prévention de piratage de session me protègent?Django: Question authentiquement personnalisée. S'il vous plaît aider

Il me semble que beaucoup de Django est construit autour de l'idée d'utiliser l'interface Admin et de ne pas construire de logiciel SAAS multi-tenant avec votre propre administrateur. Est-ce que je pense à tout cela?

Répondre

3

Vous devriez certainement utiliser le système d'authentification Django, il fait toujours 90% de ce dont vous avez besoin.

J'ai créé ce qui ressemble exactement à votre scénario dans un projet: les comptes d'entreprise, chacun avec un utilisateur admin et plusieurs utilisateurs réguliers.

la structure du modèle Voici je:

class Account(models.Model): # represents copporate customer 
    admin = models.ForeignKey(User) 
    # other fields ... 

class UserProfile(models.Model): 
    user = models.ForeignKey(User) 
    account = models.ForeignKey(Account) 

Et quelques exemples de l'application des exigences d'autorisation au niveau de vue avec les décorateurs personnalisés:

@account_access_required # request.user.get_profile().account == account 
def account_page(request, account_id): 
    # ... 

@account_admin_required # request.user == account.admin 
def account_users(request, account_id): 
    # ... 

Nous subdomains effectivement utilisé pour les comptes, donc il n'y avait pas besoin pour le paramètre explicite account_id.

Il est très raisonnable d'utiliser une interface personnalisée pour les administrateurs de compte. L'interface d'administration de Django est uniquement destinée aux utilisateurs à 100% comme les administrateurs système et le personnel de support interne.

+0

@Alex Lebedev Comment et où créez-vous l'objet User auquel UserProfile est associé? En outre, quels attributs utilisez-vous de l'objet Utilisateur (c'est-à-dire qu'il a beaucoup d'attributs disponibles tels que first_name, etc). – orokusaki

+0

'User' est tiré du système d'authentification django. Vos questions sont répondues dans sa documentation: http://docs.djangoproject.com/fr/1.1/topics/auth/#topics-auth –

Questions connexes