Django est décorateur de permission du personnel
j'essaie de limiter l'accès aux pages en utilisant 2 niveaux utilisateurs. Superutilisateur et administrateur. Super user est un utilisateur régulier de Django avec' is_superuser ' assigné. Admin user est aussi un utilisateur régulier avec seulement la permission 'is_staff' assignée.
le problème est que lorsque j'utilise ce décorateur pour un utilisateur administrateur, il ne passe pas le test:
@permission_required('is_staff')
def my_view(....)
@permission_required('is_staff')
retourne false pour les utilisateurs anonymes. (correct)
@permission_required('is_superuser')
renvoie seulement true pour superusers (correct)
@permission_required('is_staff')
retourne FALSE pour les utilisateurs avec la perm' is_staff ' assignée. (mauvais.)
une idée?
3 réponses
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.contrib.admin.views.decorators import staff_member_required
@staff_member_required
pour les vues basées sur des classes, vous pouvez ajouter permission_required('is_staff')
au urls.py
:
from django.contrib.auth.decorators import permission_required
url(r'^your-url$', permission_required('is_staff')(YourView.as_view()), name='my-view'),
pour les vues par classe, le Userpassestmixin est pratique, p.ex.
class ImportFilePostView(LoginRequiredMixin, UserPassesTestMixin):
def test_func(self):
return self.request.user.is_staff
...