Wie beschränken Sie eine Ansicht, um nur superuser?
view.py
@login_required
@permission_required('is_superuser')
def score_reset(request):
pass
url.py
url(r'^score-reset/$', score_reset, name='score-reset'),
Ich habe den folgenden code und zu meiner überraschung, die ich noch treffen, die Funktion, trotz eingeloggt zu sein mit einem nicht superuser. Ich hatte erwartet, um eine Genehmigung verweigert.
Was bin ich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
is_superuser
ist keine Erlaubnis, es ist ein Attribut für die Benutzer-Modell. Django hat bereits ein weiteres decorator können Sie Gebrauch machen von dem Namenuser_passes_test
diese überprüfung durchzuführen:user_passes_test
ist eine bestehende django Dekorateur sowie die Tatsache, dassis_superuser
ist nicht eine Erlaubnisuser_passes_test
[das obige snippet] macht die Arbeit.Aber möchten Sie vielleicht denken, dass das umleiten auf die login-Seite für alle nicht-super-Usern, auch wenn Sie bereits angemeldet.Möchten Sie vielleicht schreiben Sie Ihre eigenen Dekorator um den job zu erledigen.Oben beantwortet zu sein scheint, für eine sehr frühe Versionen von django.
Sie sind etwas komplizierter als für die später version
für django 1.11 hier ist ein bisschen ähnlich, aber einfacher Strategie.
views.py
@user_passes_test ist nicht eine elegante Lösung, wenn Sie wollen, führen Sie diesen check auf viele Ansichten.
Sie können einfach schreiben Sie Ihre eigenen decorathor zum Beispiel @staff_member_require.
Hier sehen Sie eine der möglichen Lösungen.
Können Sie übergibt der Benutzer test-decorator, den Zugang zu beschränken, wie Sie wollen. Hier ist eine Einschränkung basierend auf Benutzer-E-Mail-Beispiel:
Mehr hier https://docs.djangoproject.com/en/2.1/topics/auth/default/#the-permission-required-decorator