wiki:GestionePermessi

Version 1 (modified by lfranc, 3 years ago) (diff)

--

In questa sezione riportiamo alcuni dettagli tecnici relativi all'implementazione del framework di gestione dei permessi per la piattaforma.

In sintesi, gli elementi del puzzle sono:

  • i permessi vengono assegnati ai ruoli parametrici (ParamRoles) - gestiti tramite l'applicazione gasistafelice.auth - e non direttamente agli utenti (Users)
  • i permessi sono in sostanza delle stringhe di testo, definite nel file __init__.py dell'applicazione gasistafelice.auth
  • per verificare se un utente ha un dato permesso, basta invocare il metodo
user.has_perm(perm, obj, **kwargs)

dove user è un'istanza del modello User di Django, perm è la stringa che identifica il permesso e obj è un modello o un'istanza a seconda che il permesso sia a livello di tabella/modello o di riga/istanza; **kwargs consente di specificare ulteriori parametri, che risultano necessari in alcune circostanze (ad esempio, la concessione del permesso di creazione di un oggetto potrebbe dipendere dal contesto - pensate alla creazione di un nuovo gasista o di un nuovo patto di solidarietà).

  • Django delega la verifica dei permessi agli "auth/auth backend"; per modificare il comportamento di default, e' necessario implementare un backend custom, nel nostro caso gasistafelice.auth.backends.ParamRoleBackend; nella docstring è possibile trovare la descrizione dettagliata del suo funzionamento;
  • infine, il backend va ad invocare dei metodi specifici dell'oggetto rispetto a cui vengono verificati i permessi; le specifiche sono riportate nella docstring del backend. Inoltre, il comportamento di default e' specificato nella classe mix-in gasistafelice.auth.models.PermissionBase

Ovviamente l'implementazione dei check e' del tutto arbitraria e dipende dalla policy di controllo dell'accesso che si intende adottare (in questo senso, e' una decisione "politica").