Il modo in cui viene normalmente eseguito è con i ruoli dell'utente e una matrice di accesso ai ruoli .
Ogni utente ha un ruolo, salvato nel database insieme al nome utente, password, ecc.
Quindi, c'è una matrice di accesso al ruolo bidimensionale da qualche parte, che specifica per ciascun ruolo e per ciascun campo dello schermo quale tipo di accesso deve essere avuto dagli utenti che hanno quel ruolo specifico su quel campo specifico dello schermo. L'accesso potrebbe essere:
- "none", il che significa che il campo non deve essere mostrato agli utenti di questo ruolo
- "di sola lettura", il che significa che il campo deve essere visualizzato, ma non modificabile, e
- "lettura-scrittura", il che significa che il campo deve essere visualizzato e modificabile.
In una variante di questo schema, ogni utente può avere più ruoli, quindi l'accesso che un utente ha a un determinato campo viene calcolato per essere l'accesso massimo consentito da qualsiasi ruolo detenuto dall'utente. Quando viene utilizzata questa variazione, i "ruoli" possono essere chiamati "gruppi", nel senso che un utente può appartenere a più gruppi contemporaneamente.
In un'altra variazione ancora più sofisticata, ma ancora più complicata, introduciamo le autorizzazioni come fase intermedia, sostituendo la matrice di accesso ai ruoli con una matrice dei permessi dei ruoli molto più piccola. In questo scenario, ogni campo ha un'autorizzazione necessaria per l'accesso "di sola lettura" e un'altra autorizzazione richiesta per l'accesso "lettura-scrittura". (Queste autorizzazioni richieste possono essere codificate per ogni campo: non è necessario che siano configurabili.) Se un utente ha un ruolo che non ha nessuna delle autorizzazioni richieste, l'utente non vede affatto il campo. Quindi, ad esempio, un campo "indirizzo email" potrebbe richiedere alcune autorizzazioni "visualizza informazioni sensibili" per avere accesso "di sola lettura" ad esso e alcune autorizzazioni "modifica informazioni sensibili" per avere "lettura-scrittura" accesso ad esso. Ogni utente ha o non ha queste autorizzazioni a seconda del suo ruolo. Presumibilmente ci saranno molti campi che richiedono le stesse autorizzazioni per lo stesso tipo di accesso, quindi il numero totale di permessi sarà molto piccolo, il che a sua volta significa che la matrice dei permessi di ruolo sarà piccola.
Quindi, uno di questi approcci dovrebbe risolvere bene il tuo problema. In realtà, sarei disposto a scommettere che sono più vicini a ciò che il cliente desidera davvero realizzare: probabilmente non vogliono personalizzare il tipo di accesso di ogni singolo utente a ogni singolo campo dello schermo, probabilmente hanno alcuni gruppi di utenti e possibilmente alcuni gruppi di campo vagamente in mente, e vogliono diversi gruppi di utenti per avere diversi tipi di accesso a diversi gruppi di campi.
La matrice di accesso ai ruoli o la matrice dei permessi di ruolo può essere archiviata nel database, oppure possono essere archiviati in un file di configurazione esterno, oppure, se stai costruendo l'interfaccia utente usando un linguaggio di scripting come PHP, possono anche essere inserito direttamente nel codice e lasciare che il cliente modifichi il file sorgente PHP per modificare le autorizzazioni.