2013-05-07 9 views
6

Ho assegnato un'autorizzazione di un utente nella mia app Django 1.5. Quando ho elencare tutte le autorizzazioni degli utenti conDjango: user.has_perm è sempre true e l'utente non è superutente. Perché?

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

posso vedere un permesso (che è corretto e voluto). L'utente non è anche un superutente, non un amministratore.

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

Tuttavia, se si tenta di utilizzare user.has_perm, ho sempre arrivare True come un ritorno per qualsiasi richiesta l'autorizzazione presentata.

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

Un comportamento che mi sarei aspettato se l'utente fosse un superutente/amministratore. Perché un non-superuser ottiene sempre True per ogni richiesta? Ho perso qualche impostazione?

+1

Si sta utilizzando un modello utente personalizzato o un backend di autenticazione? Forse leggi i documenti qui: https://docs.djangoproject.com/en/dev/topics/auth/customizing/#handling-authorization-in-custom-backends –

risposta

4

Come indicato nel commento di Thane Brimhall, è necessario controllare i propri back-end di autenticazione. Potete trovare questo commento sul metodo di has_perm del modello User in django sources:

restituisce True se l'utente ha l'autorizzazione specificata. Questo metodo interroga tutti i back-end di autorizzazione disponibili, ma restituisce immediatamente se qualsiasi backend restituisce True. Pertanto, si presume che un utente che ha il permesso da un singolo backend di autenticazione abbia il permesso in generale.

Inoltre, non dimenticare di controllare i gruppi di utenti. Controlli di back-end predefiniti per le autorizzazioni dei gruppi di utenti in modo che possa essere connesso.

Problemi correlati