È utile distinguere tra due tipi di controllo degli accessi:
-
Verticale : funzioni a cui alcuni utenti possono accedere e alcuni utenti non possono. Ad esempio, chiunque può visualizzare la home page, ma solo l'amministratore può vietare un utente.
-
Orizzali : funzioni a cui possono accedere più utenti, ma i dati sono separati. Ad esempio, tutti possono accedere alla "Posta in arrivo", ma vedono solo i propri messaggi, non quelli di altre persone.
Il controllo dell'accesso verticale è quasi sempre applicato al livello controller.
La maggior parte delle applicazioni applica anche il controllo di accesso orizzontale a livello di controller. Funziona, ma c'è uno svantaggio: i controlli di accesso devono essere ripetuti in più punti, il che invita a commettere errori. Le applicazioni complesse richiedono molti controlli per applicare correttamente il controllo di accesso orizzontale.
Ma c'è un'alternativa: eseguire il controllo di accesso orizzontale nel modello. Questo tende a ridurre il numero di controlli necessari - ad es. hai un controllo del controllo accessi sull'oggetto Email, piuttosto che 15 controlli separati nei metodi del controllore che accedono all'oggetto. Una critica a questo approccio è che richiede che il modello sia consapevole dell'identità, il che potrebbe essere un accoppiamento indesiderato tra modello e controllore. Tuttavia, penso che ne valga la pena. Ho scritto più su questo argomento sul mio sito web.