2013-05-15 21 views
16

voglio recuperare tutte le autorizzazioni per l'utente come elenco di premission id ma:Come ottenere le autorizzazioni utente?

user.get_all_permissions() 

mi danno elenco di nomi di autorizzazione. Come farlo?

+0

perché avete bisogno di questo? – karthikr

+0

Ho bisogno di questo per impostare le corrette caselle di controllo in ModelMultipleChoiceField nel mio modulo – Nips

+0

stai esponendo le autorizzazioni all'applicazione? non è una buona idea. – karthikr

risposta

11

La chiave è ottenere gli oggetti di autorizzazione di questo tipo:

from django.contrib.auth.models import Permission 
permissions = Permission.objects.filter(user=user) 

e lì si può accedere alla proprietà id in questo modo:

permissions[0].id 

Se si desidera che l'elenco (id, permission_name) effettuare le seguenti operazioni:

perm_tuple = [(x.id, x.name) for x in Permission.objects.filter(user=user)] 

Spero che sia d'aiuto!

+0

Cosa succede se l'utente si trova in un gruppo che dispone di tale autorizzazione? –

+0

@AmoghTalpallikar Ho avuto una risposta per risolvere il problema che hai segnalato. – DRC

18

per ottenere tutte le autorizzazioni di un determinato utente, anche le autorizzazioni associate a un gruppo di questo utente fa parte di:

from django.contrib.auth.models import Permission 

def get_user_permissions(user): 
    if user.is_superuser: 
     return Permission.objects.all() 
    return user.user_permissions.all() | Permission.objects.filter(group__user=user) 
+0

Sto usando questo codice ma per qualche motivo restituisco permessi duplicati. –

+0

Ecco un'opzione per rimuovere i duplicati (presumibilmente perché sono permessi di gruppo e utente): 'lista (set (chain (user.user_permissions.filter (content_type = ctype) .values_list ('codename', flat = True), Permission. objects.filter (group__user = user, content_type = ctype) .values_list ('codename', flat = True)))) 'La catena dei sospetti è talvolta più efficiente di |. I valori_list chiama e filtra per tipo di contenuto non sono necessari ma sono ulteriori opzioni a seconda delle esigenze. – Chris

Problemi correlati