Insieme alla logica di dominio della mia applicazione sto cercando di delineare il modello di sicurezza. Sono bloccato da un requisito che mi impedisce di considerare la sicurezza solo una preoccupazione trasversale rispetto alla mia logica di dominio. Ecco la mia situazione.
Un utente nel mio sistema può essere autorizzato a creare un certo tipo di oggetti, ad esempio "filtri". Presento un'autorizzazione denominata "CREATE_FILTER" e un utente può creare o meno filtri, a seconda che l'amministratore abbia assegnato tale autorizzazione a questo utente o meno. Ok.
Consideriamo ora un requisito più complesso quando il numero di filtri che un utente può creare è limitato. Quindi, ad es. l'amministratore dovrebbe essere in grado di impostare il numero massimo di filtri che ogni utente è autorizzato a creare, o anche più complesso, ad assegnare i numeri massimi individualmente agli utenti, ad esempio il valore di 3 a Utente1, 5 a Utente2 e così via. Pertanto, il sistema di sicurezza, al fine di autorizzare la creazione di filtri a un utente, non è sufficiente per verificare se un utente ha assegnato tale autorizzazione, ma deve analizzare il modello di dominio in modo complesso per vedere quanti filtri ci sono già creato dall'utente per prendere la decisione. Per rendere le cose più complesse, possiamo immaginare che il limite massimo dipenderà dalla quantità di denaro che l'utente ha sul proprio account o qualcosa del genere.
Voglio concettualmente separare (almeno nella mia mente), se una logica di sicurezza così complicata riguarda esclusivamente la sicurezza (che ovviamente dipende dal modello di dominio) o è già una parte a pieno titolo della logica di dominio si? Ha senso mantenere un concetto di 'permesso', quando assegnare / rimuovere permessi non aiuta molto (dal momento che è lo stato del dominio su cui dipende la decisione dell'autorizzazione piuttosto che le autorizzazioni assegnate)? Sarebbe un modo per andare, ad esempio, ad avere un complicato concetto di permesso che non consente semplicemente un'azione da un semplice fatto della sua esistenza, ma piuttosto implicherebbe una logica di decisione complessa?