Verifica i permessi all'interno di un modello in Django


95

Posso usare il controllo delle autorizzazioni dell'applicazione Auth all'interno di un modello in Django? (Voglio visualizzare un semplice modulo alla fine del modello per gli utenti privilegiati)

E, cosa più importante, dovrei farlo o non è questo il "modo Django"?


Per le persone come me, che si imbattono in questo in seguito, il collegamento per Django 1.5 è stato leggermente modificato. Le informazioni possono ora essere trovate nei documenti a questo URL: docs.djangoproject.com/en/1.5/topics/auth/default/#permissions Niente nella risposta originale è veramente cambiato, ma questo è solo un nuovo URL :)
Xudonax

Risposte:


192

Se stai cercando di verificare le autorizzazioni nei modelli, il codice seguente sarebbe sufficiente:

{% if perms.app_label.can_do_something %}
<form here>
{% endif %}

Dove modello si riferisce al modello per cui l'utente necessita delle autorizzazioni per visualizzare il modulo.

Fare riferimento a https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions per ulteriori esempi.

Le autorizzazioni dell'utente attualmente connesso vengono memorizzate nella variabile del modello {{ perms }}

(Questo richiede il seguente processore contesto essere abilitato: django.contrib.auth.context_processors.auth)


15
Nota che se hai effettuato l'accesso come superutente, perms.app_label.foobarsarà sempre vero, anche se hai scritto male il nome dell'autorizzazione.
Flimm

2
Nota anche qui che "can_do_something" è il nome dell'autorizzazione, quindi non è necessario aggiungere un prefisso "can" al nome dell'autorizzazione. Ad esempio, perms.my_app.add_object
Karim Sonbol

13

Testato su Django 2.0 +

Se vuoi vedere tutte le autorizzazioni di cui dispone l'utente che ha effettuato l'accesso, sul tuo modello (.html), stampa:

{{ perms.app_name }}

O

{{ perms }}

Per verificare se l'utente dispone dell'autorizzazione, utilizzare:

{% if perms.app_name.change_model_name_lower_cased %}

Per esempio :

{% if perms.Utilization.change_invoice %}

Qui: L' utilizzo è il nome della mia app. La fattura è un nome di modello.

Nota che in generale ci saranno 4 tipi di autorizzazioni:

  • modifica [Es. Utilization.change_projectemail]
  • visualizza [Es. Utilization.view_invoice]
  • elimina [Es. Utilization.delete_invoicetype]
  • aggiungi [Es. Utilization.add_invoicetype]

Inoltre, se vuoi vedere tutte le autorizzazioni di un utente a causa dei gruppi a cui appartiene, avvia la shell Django ...

user = User.objects.get(username='somename')
user.get_group_permissions()

Qui, tutte le autorizzazioni elencate, sono dovute ai gruppi a cui appartiene.


1
Sì. Davvero: minuscolo. Non a forma di serpente. L'idea di vedere i permessi con {{perms}} è fantastica, quindi penso che questa sia la risposta migliore.
mirek

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.