Attualmente lavora su un sistema di tipo CRM basato sul web che si occupa di vari moduli come aziende, contatti, progetti, progetti secondari, ecc. Un tipico sistema di tipo CRM (modulo web asp.net, C #, backend SQL Server). Abbiamo in programma di implementare la sicurezza basata sui ruoli in modo che fondamentalmente un utente possa avere uno o più ruoli.
I ruoli verrebbero suddivisi in base al tipo di modulo, ad esempio:
-Società
-Contattare
E poi con le azioni per quel modulo, per esempio ogni modulo finirebbe con una tabella come questa:
Role1 Example:
Module Create Edit Delete View
Company Yes Owner Only No Yes
Contact Yes Yes Yes Yes
Nel caso precedente Role1
ha due tipi di modulo (Azienda e Contatto). Per la società, la persona assegnata a questo ruolo può creare società, può visualizzare le società, può solo modificare i record che ha creato e non può eliminare. Per questo stesso ruolo per il modulo contatta questo utente può creare contatti, modificare contatti, eliminare contatti e visualizzare i contatti (in pratica i diritti completi).
Mi chiedo se sia meglio entrare nel sistema per eseguire il ruolo dell'utente con qualcosa del tipo:
List<Role> roles;
Dove la classe Role
avrebbe una sorta di List<Module> modules;
(può contenere Azienda, Contatto, ecc.).? Qualcosa con l'effetto di:
class Role{
string name;
string desc;
List<Module> modules;
}
E la classe azione modulo avrebbe una serie di azioni (Crea, Modifica, Elimina, ecc.) per ogni modulo:
class ModuleActions{
List<Action> actions;
}
E l'azione ha un valore se l'utente può eseguire il diritto:
class Action{
string right;
}
Solo un'idea approssimativa, so che l'azione potrebbe essere un enum e ModuleAction può probabilmente essere eliminato con un List<x, y>
. La mia domanda principale è quale sarebbe il modo migliore per archiviare queste informazioni in questo tipo di applicazione: Devo memorizzarlo nello stato Sessione utente (ho una sessione di sessione in cui gestisco le cose relative all'utente). Generalmente lo carico durante il caricamento iniziale dell'applicazione (global.asax). Posso semplicemente virare su questa sessione.
O dovrebbe essere caricato all'evento di caricamento della pagina di ciascun modulo (caricamento della pagina della società ecc.). Alla fine ho bisogno di essere in grado di nascondere / mostrare vari pulsanti / div in base al ruolo dell'utente e questo è quello che mi ha fatto pensare di caricarlo tramite la sessione.
Qualsiasi esempio o punto sarebbe fantastico.