2017-04-03 3 views
0

Existe-t-il un moyen intégré d'attribuer des autorisations fonctionnelles aux utilisateurs de Django? De documentations ressemble à des autorisations Dajngo sont liés à des modèles. Par exemple, ce que je veux, c'est créer 4 types de groupes d'utilisateurs: utilisateurs normaux, gestionnaires, administrateurs et superadmin.Autorisations fonctionnelles dans Django

Par défaut, les utilisateurs de différents groupes auront accès à différents types d'actions. Par exemple, les utilisateurs du groupe Admin peuvent effectuer les tâches Tâche 1, Tâche 2 et Tâche 3, mais les utilisateurs du groupe Gestionnaires peuvent uniquement exécuter Tâche 1 et Tâche 2 (peu importe l'application dans laquelle ces tâches sont). En outre, les autorisations d'utilisateur peuvent être modifiées pour qu'un utilisateur révoque l'accès à l'exécution de certaines tâches. Par exemple, par défaut, tous les administrateurs peuvent effectuer les tâches Tâche 1, Tâche 2 et Tâche 3, mais l'autorisation d'un administrateur particulier peut être modifiée pour exécuter uniquement Tâche 1 et Tâche 3. Est-ce que cela peut être réalisé en construisant des permissions et des groupes Django ou en utilisant un système d'autorisation propre (ou y a-t-il une application Django tierce pour cela)?

S'il est préférable d'écrire son propre système de permission et de groupe, toute suggestion de conception doit suivre.

Merci!

+0

Le décorateur has_permission peut être utilisé pour les vues, c'est beaucoup à gérer - les utilisateurs, les groupes et les permissions. J'ai utilisé django-guardian pour le contrôle d'accès basé sur les rôles. Cela pourrait convenir à vos besoins. – fiacre

Répondre

1

Vous pouvez définir les autorisations dans la page d'administration comme foo.can_write ou dans votre propre point de vue comme

myuser.user_permissions.add(permission, permission, ...) 

Dans la vue, vous pouvez définir les autorisations nécessaires pour une action. Des documentations:

from django.contrib.auth.decorators import permission_required 
@permission_required('polls.can_vote') 
def my_view(request):