n'autorisant que la connexion super utilisateur
-
05-07-2019 - |
Question
J'ai écrit une page Django dans laquelle seuls les super-utilisateurs doivent se connecter. J'ai donc ajouté
foo_view = staff_member_required(foo_view)
mais cela ne coupe pas, maintenant je peux contrôler uniquement autoriser les utilisateurs marqués du personnel à se connecter mais cela ne coupe pas. J'ai essayé quelque chose comme
def foo_view(request):
if not request.user.is_superuser:
#render some "not allowed page"
#else render the page
mais cela ne semble pas m'aider à me donner des erreurs.
La solution
Essayez:
from django.contrib.auth.decorators import user_passes_test
def foo_view(request):
# ...
foo_view = user_passes_test(lambda u: u.is_superuser)(foo_view)
Ou (avec Python > = 2.4):
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.is_superuser)
def foo_view(request):
# ...
Autres conseils
Le code que vous avez suggéré fonctionne parfaitement pour moi, je l'ai utilisé dans de nombreux projets depuis Django 1.4:
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
@login_required
def foo_view(request):
if not request.user.is_superuser:
return HttpResponse('The user is not superuser')
# Do whatever you need to do
Ce code me convient parfaitement depuis Django 1.4 à 1.7 au moins.
Les réponses ci-dessus semblent concerner les toutes premières versions de Django. Ils sont un peu compliqués que pour la version plus récente
pour django 1.11, voici une stratégie un peu similaire mais plus simple. cliquez ici
.