2013-05-07 6 views
6

Ich habe die Berechtigung eines Benutzers in meiner Django 1.5 App zugewiesen. Wenn ich alle Benutzerberechtigungsliste mitDjango: user.has_perm immer wahr und Benutzer ist nicht Superuser. Warum?

In [1]: user.get_all_permissions() 
Out[1]: set([u'profile.change_profile']) 

kann ich eine Erlaubnis sehen (was richtig ist, und wollte). Der Benutzer ist auch kein Superuser, kein Administrator.

In [2]: user.is_superuser 
Out[2]: False 

aber wenn ich versuche, user.has_perm zu verwenden, habe ich immer True als Gegenleistung für jeden eingereichten Erlaubnisanfrage.

In [3]: user.has_perm('random_permission') 
Out[3]: True 

Ein Verhalten, das ich erwarten würde, wenn der Benutzer ein Superuser/admin ist. Warum erhält ein Nicht-Superuser immer True für jede Anfrage? Habe ich irgendeine Einstellung verpasst?

+1

Verwenden Sie ein benutzerdefiniertes Benutzermodell oder ein Authentifizierungs-Back-End? Vielleicht lesen Sie die Dokumente hier: https://docs.djangoproject.com/en/dev/topics/auth/customizing/#handling-authorization-in-custom-backends –

Antwort

4

Wie im Kommentar von Thane Brimhall erwähnt, sollten Sie Ihre Authentifizierungs-Backends überprüfen. Sie können diesen Kommentar auf has_perm Methode von User-Modell in django sources finden:

Gibt True zurück, wenn der Benutzer die angegebene Berechtigung hat. Diese Methode fragt alle verfügbaren Auth-Backends ab, kehrt aber sofort zurück, wenn ein Backend True zurückgibt. Daher wird angenommen, dass ein Benutzer, der die Erlaubnis von einem einzelnen Authentifizierungs-Backend hat, im Allgemeinen eine Berechtigung hat.

Vergessen Sie auch nicht, Benutzergruppen zu überprüfen. Das Standard-Backend prüft auf Benutzergruppenberechtigungen, daher kann es verbunden sein.

Verwandte Themen