Supponiamo che io abbia un sistema complesso dove ci sono grandi alberi di persone. I pensieri semplici sono rapporto dipendenti/manager, molti dipendenti riferiscono a un manager. Ora oltre al gestore ci sono staff di supporto che sono in grado di agire per conto del manager in grado di manipolare i dipendenti dei manager.CQRS che applica problemi trasversali come la sicurezza
In un sistema CQRS, come modellare un messaggio per un'ipotetica azione di "modifica dipendente" in cui l'invocatore dell'azione è uno staff di supporto. L'azione può avere successo solo se il membro dello staff in base alla relazione di sicurezza del manager agisce su un dipendente nel suo ambito.
Verificare la sicurezza di ciò richiederebbe l'interrogazione del database per verificare che la persona da modificare sia effettivamente all'interno della catena di dipendenti di quel gestore.
Dove si verifica questa query? Prima di generare il messaggio "modifica dipendente"?
Se i dati vengono convalidati in anticipo prima di dare origine al messaggio, in un sistema eventualmente coerente si supponga che prima che il messaggio "modifica dipendente" sia stato elaborato si è verificata un'azione separata che avrebbe rimosso l'autorizzazione dell'utente per completare il " modifica l'azione "dipendente". Se il gestore comandi non convalida i problemi di sicurezza di quel messaggio, il messaggio continuerà comunque anche se l'utente non ha più l'autorizzazione per eseguirlo.
Ciò sembrerebbe implicare che la convalida su entrambi i lati, simile alla validazione lato server della convalida UI & sarebbe la migliore linea di azione. Tuttavia, il metodo di completamento di tale convalida sembra come se violasse i principi chiave di CQRS.
Quali sono gli approcci migliori quando si ha a che fare con questi e altri problemi trasversali simili quando si utilizza CQRS?
IMO non esiste una risposta generale ... Convaliderei sempre sul lato del gestore comandi * almeno * e ** facoltativamente ** "in avanti" (che potrebbe essere nella parte che accetta un messaggio nella coda) – Yahia
Penso anche che sia importante distinguere tra veri problemi trasversali come l'autenticazione, l'autorizzazione semplice (questo utente è autorizzato a eseguire un'azione di questo tipo), dalle regole aziendali che determinano se qualcosa è permesso per una specifica entità. –