Ho bisogno di assistenza per la progettazione di un sistema che implementa la sicurezza a livello di riga che potrebbe avere più condizioni che devono essere soddisfatte.
Contesto
Supponiamo di avere un utente. Un utente può appartenere a 1 ... n organizzazioni, 1 ... n reparti e 1 ... n posizioni. Forse correlati / utili: Queste tabelle seguono un flusso gerarchico in cui i dipartimenti appartengono a 1 ... n organizzazioni e le posizioni appartengono a 1 ... n reparti.
Il mio caso d'uso
Supponiamo di avere un'entità documento. Solo i gruppi di utenti che soddisfano la regola di visibilità associata per questo documento possono accedervi.
Esempi (gli elenchi rientrati sono possibili esempi di restringimento della regola definita per il documento)
- solo utenti nell'organizzazione X.
- nell'organizzazione X, dipartimento 1
- nell'organizzazione X, reparto 1, posizione A
- nell'organizzazione X, posizione A
- solo utenti nel dipartimento 1
- nel reparto 1, posizione A
- solo utenti in Posizione A
Un documento avrà un elenco di queste regole. Pertanto qualsiasi combinazione di quanto sopra è possibile, ma fino a quando come è soddisfatta qualsiasi regola, quindi l'utente ha accesso.
La mia attuale implementazione include la creazione di questa tabella che include la creazione di queste regole in cui le 3 categorie sono campi nullable / facoltativi.
Nell'esempio seguente, supponiamo di avere un documento con Id 1. Quindi "solo gli utenti nell'organizzazione X" avrebbero una riga che assomigliava a {ID Documento: 1, Organizzazione X}. Un altro esempio "nell'organizzazione X, posizione A" sarebbe simile a {ID Documento: 1, Posizione A, Organizzazione X}
Per controllare l'accesso, dovrei prendere una lista di regole per il documento specificato. Se una regola ha tutte e tre le proprietà specificate, l'utente deve appartenere a tutte e tre le proprietà. Ma questo diventa più complesso perché un documento può avere più regole con l'unica condizione che l'utente deve soddisfare una di queste regole. Quindi lo stesso documento potrebbe avere una regola in cui viene specificata solo una proprietà. Questa implementazione genera un sacco di se dichiarazioni
Come potrei fare per implementare questo design in modo più pulito? TIA.