Einstellung Django-admin-Berechtigungen programmgesteuert
Die Django-Website, die ich arbeite, hat die Möglichkeit, für die Benutzer für ein Konto anmelden. Um Ihnen mit einigen Bearbeitungsfunktionen, ich verwende die built-in-Django-admin. Aber, ich habe ein problem: Nachdem sich ein Benutzer angemeldet hat, haben Sie keine Berechtigungen innerhalb der Django-admin, auch nicht die Berechtigungen zum anzeigen. Daher meine Frage: Wie kann ich im code, zuweisen von admin-Berechtigungen für den Benutzer für die entsprechenden Modelle, in der gleichen Weise, die ich kann, weisen Sie Sie manuell in die "Benutzer-Berechtigungen" Abschnitt Bearbeiten der Benutzer in der admin? Ich habe bereits versucht mit dem üblich has_xxx_permissions()
mit benutzerdefinierten ModelAdmin
Klassen, aber das hat nicht funktioniert. Also meine Vermutung ist, dass ich etwas übersehen offensichtlich. Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
https://docs.djangoproject.com/en/dev/topics/auth/default/#permissions-and-authorization
user.user_permissions.add()
für mich gearbeitet. Django 1.4 angehobenAttributeError: 'User' object has no attribute 'permissions'
wenn ich versuchte, nuruser.permissions.add()
.Für Ihre Zwecke wäre es wahrscheinlich viel mehr einfach und effizient zuweisen alle neuen Benutzer zu einer bestimmten Gruppe, und geben Sie die Gruppe alle Berechtigungen, die der Benutzer benötigt. Jedes Mitglied der Gruppe Erben diese Berechtigungen als gut.
Können Sie die Gruppe erstellen und zuweisen von Berechtigungen, um es im admin. Dann müssen Sie nur fügen Sie etwas wie das folgende, um Ihren Registrierungscode zu stellen.
dgel's Antwort wies mich in die Richtung führen, um eine funktionierende Lösung für mich. Im Grunde ist das was er zu sein scheint, darauf hindeutet, ist:
Permission.objects.get()
. Die einzige Schwierigkeit dabei ist, herauszufinden, dascodename
parameter, die für die admin-Berechtigungen, besteht aus einer Aktion ("hinzufügen", "ändern" oder "löschen"), einem Unterstrich und der name des Modells. Also, wenn Sie haben ein Modell namensFoo
und Sie wollen, um alle Berechtigungen für Sie, Sie müssen 3 von Berechtigungen, die jeweils mit dem Inhalt Typ IhresFoo
Modell plus die code-Namenadd_foo
,change_foo
, unddelete_foo
.user.user_permissions.add(permission)
.Kopf über dgel Antworten für code Beispiele. Blick auf eine data-dump-auth-app (
manage.py dumpdata auth
) einer bestehenden Django-Datenbank lieferte mir Einsichten in die innere Funktionsweise von Berechtigungen zu.Als von Django 1.6:
Jeder Benutzer hat eine viele-zu-viele-Feld
user_permissions
um Erlaubnis - Sie können Berechtigungen hinzufügen, um diese:v1.6 Docs:
Ich werde Ihre Frage zu beantworten genau da fand ich diese Frage mit Google. Ich werde zeigen, was ich mache in Django 1.9 mit Gruppen, zeigen dann, wie es zu tun, um einem Benutzer.
vom django.contrib.auth.Modelle importieren, Gruppe, Berechtigung
Gruppe, __ = Gruppe.Objekte.get_or_create(name='my_group')
Ist es ziemlich einfach, die Anpassung an den Benutzer:
Bevorzuge ich die Gruppe, weil Sie möglicherweise das hinzufügen von Berechtigungen in der Zukunft und kann einfach zur Gruppe hinzufügen, anstatt re-doing all users.