Django is_staff permission décorateur

J’essaie de limiter l’access aux pages en utilisant 2 niveaux d’utilisateurs. Superutilisateur et administrateur. Super user est un utilisateur régulier de Django avec l’atsortingbut “is_superuser”. L’utilisateur administrateur est également un utilisateur régulier avec la seule permission ‘is_staff’ atsortingbuée.

Le problème est que lorsque j’utilise ce décorateur pour un utilisateur administrateur, il ne réussit pas le test:

@permission_required('is_staff') def my_view(....) 

@permission_required('is_staff') renvoie false pour les utilisateurs anonymes. (correct)
@permission_required('is_superuser') ne renvoie que true pour les super-utilisateurs (correct)
@permission_required('is_staff') renvoie FALSE pour les utilisateurs avec la permission ‘is_staff’ atsortingbuée. (faux).

Des pensées?

is_staff n’est pas une permission, donc au lieu de permission_required vous pouvez utiliser:

 @user_passes_test(lambda u: u.is_staff) 

ou

 from django.consortingb.admin.views.decorators import staff_member_required @staff_member_required 

pour les vues basées sur les classes, vous pouvez append permission_required('is_staff') à l’ urls.py :

 from django.consortingb.auth.decorators import permission_required url(r'^your-url$', permission_required('is_staff')(YourView.as_view()), name='my-view'), 

Pour les vues basées sur des classes , le UserPassesTestMixin est pratique, par exemple

 class ImportFilePostView(LoginRequiredMixin, UserPassesTestMixin): def test_func(self): return self.request.user.is_staff ...