Sto lavorando su una piccola applicazione cercando di cogliere i principi del design basato sul dominio. In caso di successo, questo potrebbe essere un pilota per un progetto più ampio. Sto cercando di seguire il libro "Implementing Domain-Driven Design" (di Vaughn Vernon) e cercando di implementare un forum di discussione simile e semplice. Ho anche controllato gli esempi IDDD su github. Ho delle difficoltà nell'adottare l'identità e l'accesso al mio caso. Consentitemi di fornire alcune informazioni di base:
- I (si spera) comprendano il ragionamento alla base della separazione della logica degli utenti e delle autorizzazioni: si tratta di un dominio di supporto, ed è un contesto limitato diverso.
- Nel dominio principale, non ci sono utenti, solo Autori, Moderatori, ecc. Questi vengono creati raggiungendo il contesto di Identità e Accesso utilizzando un servizio e quindi traducendo gli oggetti Utente ricevuti e il Moderatore.
-
Le operazioni di dominio vengono chiamate con un ruolo correlato come parametro: ad esempio:
ModeratePost( ..., moderator);
-
Il metodo dell'oggetto dominio controlla se la data istanza di Moderatore non è nullo (l'istanza di Moderatore sarà nullo se l'utente ha chiesto dal contesto Identità e Accesso non ha il ruolo di Moderatore).
-
In un caso, esegue un controllo aggiuntivo prima di modificare un post:
if (forum.IsModeratedby(moderator))
Le mie domande sono:
-
In quest'ultimo caso, i problemi di sicurezza non si fondono nuovamente nel dominio principale? Precedentemente i libri affermavano "con chi può pubblicare un argomento, o con quali condizioni è permesso: un forum ha solo bisogno di sapere che un autore lo sta facendo in questo momento".
-
L'implementazione basata sul ruolo nel libro è abbastanza semplice: quando un moderatore è il dominio principale prova a convertire l'ID utente corrente in un'istanza di Moderatore o in un Autore quando ne ha bisogno. Il servizio risponderà con l'istanza appropriata o un null se l'utente non ha il ruolo richiesto. Tuttavia, non riesco a vedere come potrei adattarlo a un modello di sicurezza più complesso; il nostro progetto attuale di cui sto pilotando ha un modello piuttosto complesso con gruppi, ACL, ecc.
Anche con regole che non sono molto complesse, come: "Un post deve essere modificato solo dal suo proprietario o da un editor", questo approccio sembra non funzionare, o almeno non vedo il modo corretto di implementare esso.
Chiedere il contesto Identity and Access per un'istanza di OwnerOrEditor non sembra giusto, e finirei con sempre più classi relative alla sicurezza nel dominio principale. Inoltre, avrei bisogno di passare non solo l'ID utente, ma l'identificatore della risorsa protetta (l'id del post, del forum, ecc.) Al contesto di sicurezza, che probabilmente non dovrebbe interessare a queste cose (è corretto? )
Estraendo le autorizzazioni dal dominio principale e controllandole nei metodi degli oggetti di dominio o nei servizi, finirei al punto di partenza: mescolare i problemi di sicurezza con il dominio.
Ho letto da qualche parte (e sono tendenzialmente d'accordo) che queste cose legate al permesso non dovrebbero far parte del dominio principale, a meno che la sicurezza e le autorizzazioni non siano il dominio principale stesso. Una semplice regola come quella sopra citata giustifica che la sicurezza fa parte del dominio principale?