J'essaie de limiter l'accès aux pages en utilisant 2 niveaux d'utilisateurs. Superutilisateur et administrateur. Le super utilisateur est un utilisateur régulier Django avec "is_superuser" affecté. L'utilisateur administrateur est également un utilisateur régulier avec uniquement l'autorisation "is_staff" attribué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')
renvoie false pour les utilisateurs anonymes. (correct)@permission_required('is_superuser')
renvoie uniquement vrai pour les superutilisateurs (correct)@permission_required('is_staff')
renvoie FAUX pour les utilisateurs avec le perm 'is_staff' assigné. (faux).
Des pensées?
is_staff
n'est pas une autorisation 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 les classes, le serPassesTestMixin est pratique, par ex.
class ImportFilePostView(LoginRequiredMixin, UserPassesTestMixin):
def test_func(self):
return self.request.user.is_staff
...
pour les vues basées sur les classes, vous pouvez ajouter permission_required('is_staff')
à urls.py
:
from Django.contrib.auth.decorators import permission_required
url(r'^your-url$', permission_required('is_staff')(YourView.as_view()), name='my-view'),