Esistono diversi modi per gestire le autorizzazioni. Volendo convalidare questi nel database, una delle opzioni possibili è stabilire un elenco di autorizzazioni e associare queste autorizzazioni a possibili azioni da parte dell'utente (la creazione di gruppi è una conseguenza di questo rapporto).
Supponendo quindi un caso molto semplice, in cui l'utente decide di eseguire un'azione sull'interfaccia, ad esempio, "aggiungi un commento a un post", un possibile flusso di lavoro è il seguente
Sistema
Interfaccia
Premendounpulsantenell'interfacciasirichiama"Aggiungi commento" (che agisce sull'interfaccia per creare un campo di testo e un pulsante, se l'utente ha il permesso di farlo, altrimenti verrà visualizzato il messaggio di errore).
API
Tutti i metodi, non pubblici, nel back-end, prevedono il controllo delle autorizzazioni prima di eseguire il resto del codice.
Quindi la query viene eseguita nel database per vedere se l'utente ha il permesso per l'azione "Commento".
database
Il database esegue una selezione nella tabella in cui sono registrati utenti e azioni. Risposta con un NULL (non c'è autorizzazione) o ID (permesso).
A questo punto possiamo supporre che:
- Qualsiasi azione privata (metodo esposto nell'API), dopo la convalida dei parametri di input, esegue il controllo di validità.
- La funzione nel back-end, per autorizzare l'esecuzione del codice richiede 2 parametri (minimo): UserID, ActionID;
- La funzione nel database (o la query da eseguire nel database) implica la lettura in una tabella che ha 3 campi (minimo): ID, ID utente, ID azione;
Gruppi
I gruppi dovrebbero (potrebbero) essere gestiti come preset di permesso. Ci sono tanti modi per gestire i permessi del gruppo. Probabilmente uno dei meno costosi in termini di sviluppo, è quello di creare una tabella per la gestione della relazione tra gruppi e utenti.
Conclusioni
Le strutture del nostro database saranno quindi le seguenti:
Utenti
- UserID
- Nome utente
- ...
Azioni
- ActionID
- ActionName
- ...
Permessi
- ID
- UserID
- ActionID
Gruppi
- ID
- GroupID
- UserID