Attraverso la maggior parte della mia esperienza di sviluppo, non ho mai dovuto gestire una grande varietà di architetture per il controllo degli accessi.
Sono stati tutti molto semplici:
Group [Create, Update, Delete]
- User 1
- User 2
Group [Update, Delete]
- User 2
Che, a tutti gli effetti, funziona bene. Il problema che ho è la sua effettiva implementazione. Tutte le soluzioni su cui ho lavorato garantiscono / negano la visibilità di un collegamento a un menu, o disabilitano un pulsante, ecc. Tutto questo è controllato dal livello più in alto dell'app, che sia un'interfaccia WebApp o WinForms.
Sono nelle prime fasi della progettazione di un sistema WinForms piuttosto grande, quindi mi piacerebbe avere l'architettura di sicurezza fin dall'inizio.
Sebbene non mi veda allontanarsi dal limitare visivamente l'utente dall'eseguire alcune azioni (disabilitando i controlli ristretti ecc.), sono sicuro che ci sono soluzioni migliori disponibili che svolgono gran parte del lavoro nell'interfaccia utente.
A quanto ho capito (e questi potrebbero essere limitati dalla mia ignoranza), queste sono le mie opzioni:
- Inserisci la logica per restituire e verificare i diritti utente nel livello aziendale
- Nell'evento form_load, ottieni queste regole e attiva / disattiva gli elementi dell'interfaccia utente
- Lascia intatti gli elementi dell'interfaccia utente e interrompi l'operazione dal livello aziendale se l'utente non dispone dell'autorizzazione per l'azione (dirty!)
Sicuramente ci devono essere soluzioni più eleganti di questo. Qualcuno potrebbe fornirmi alternative o miglioramenti alle idee di cui sopra?
Ci sto pensando in modo errato? Devo rivalutare il mio design del database mentre ci sono?