24

Ich habe einem Benutzer über die Admin-Schnittstelle einige Berechtigungen hinzugefügt.Django-Benutzer get_all_permissions() ist leer, während user_permissions gesetzt ist

Aus irgendeinem Grund alle zul Funktionen fehlschlagen, zB

>>> user.get_all_permissions() 
set([]) 

Aber die Tabelle direkt zugreifen, funktioniert:

>>> user.user_permissions.all() 
(list of permissions as expected) 

Was die „get_all_permissions“ führen kann (und alle zul Funktionen wie has_perm()) fehlgeschlagen?

Dank

+2

Was sind die Authentifizierungs-Backends in Ihrer settings.py? – satoru

Antwort

42

hatte das gleiche Problem. Ich nehme an, dass Sie irgendwann einen selbst erstellten AUTHENTICATION_BACKEND verwendet haben? Die meisten Beispiele im Netz (einschließlich der DJANGO 1.0 DOKUMENTATION!) Erwähnen nicht, dass die Backends auch für die Handhabung der Berechtigungen verantwortlich sind.

jedoch kein großes Problem: In welchem ​​Backend-Code-Datei befindet, um diesen Import:

from django.contrib.auth.backends import ModelBackend 

Dann stellen Sie sicher, das Backend Sie schrieb erweitert ModelBackend, zB:

class EmailBackend(ModelBackend): 

Sollte gut.

+0

Ja, ich habe es später herausgefunden. Ich habe das Backend geändert, um Benutzernamen ohne Groß- und Kleinschreibung zu unterstützen und die Berechtigungen zu brechen. – Boris

+0

+1, hatte genau dieses Problem! – Agos

+2

Ich habe dir eine +1 b/c gegeben, du hörst dich an wie ein guter Typ – abbood