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 ...