La nostra applicazione web ha un sistema di controllo accessi complesso che incorpora basato sui ruoli e a livello di oggetto privilegi.
Nel livello della business logic, questo è implementato da un componente che ottiene (e memorizza nella cache) tutti i dati necessari con una query batch e calcola il tipo e il livello di accesso dell'utente a qualsiasi oggetto nel sistema. (Un'ottimizzazione futura sarebbe il condizionamento condizionato in base ai dati di cui abbiamo bisogno per una particolare richiesta.)
Tuttavia, la logica dei privilegi vista in questo componente viene duplicata altrove nelle query del database. (Abbiamo bisogno di nascondere i dati nelle schermate di elenco che l'utente non ha il privilegio di visualizzare.)
Come possiamo ridurre o eliminare questa duplicazione di logica tra il componente di controllo di accesso dell'applicazione e le nostre query di database?
Mi vengono in mente due approcci. Sono sicuro che ce ne sono altri.
- Verifica il privilegio di visualizzazione nell'applicazione per ogni riga restituita dal server tramite query dagli schermi di elenco.
- Spostare più della logica di controllo degli accessi in una funzione memorizzata che può essere richiamata dalle query e dal codice dell'applicazione.
Le risposte dovrebbero difendere i meriti del metodo proposto rispetto ad altri metodi. Ad esempio, se il mio secondo approccio suggerito è auspicabile, perché? Se hai suggerito un terzo approccio, perché ha vinto entrambi i miei approcci?