2013-05-07 15 views
6

Przydzieliłem uprawnienia użytkownika w mojej aplikacji Django 1.5. Kiedy lista wszystkich uprawnień użytkownika zDjango: user.has_perm zawsze prawdziwe, a użytkownik nie jest superużytkownikiem. Czemu?

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

widzę jeden gość (co jest poprawne i chciał). Użytkownik również nie jest superużytkownikiem, a nie administratorem.

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

Jednakże jeśli próbuję użyć user.has_perm, zawsze dotrzesz True jako powrót do jakiegokolwiek złożonego wniosku uprawnień.

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

Zachowanie, którego mógłbym się spodziewać, jeśli użytkownik jest superużytkownikiem/administratorem. Dlaczego non-superuser uzyskuje zawsze True dla każdego żądania? Czy brakowało mi jakiegoś ustawienia?

+1

Czy używasz niestandardowego modelu 'User' lub mechanizmu uwierzytelniania? Może przeczytać na dokumentach tutaj: https://docs.djangoproject.com/en/dev/topics/auth/customizing/#handling-authorization-in-custom-backends –

Odpowiedz

4

Jak wspomniano w komentarzu Thane Brimhall, powinieneś sprawdzić swoje backendi uwierzytelniające. można znaleźć ten komentarz na metodzie has_perm modelu użytkownika w django sources:

Zwraca True jeżeli użytkownik ma określonego uprawnienia. Ta metoda sprawdza wszystkie dostępne obiekty zaplecza auth, ale zwraca natychmiast, jeśli którykolwiek z nich przywróci wartość True. W związku z tym zakłada się, że użytkownik, który ma pozwolenie z pojedynczego backendu auth , ma ogólne pozwolenie.

Nie zapomnij również o sprawdzeniu grup użytkowników. Domyślne kontrole backend dla uprawnień grup użytkowników mogą więc być połączone.