Domanda

Sto usando il modello di repository per interrogare il nostro database usando NHibernate. Rende davvero facile fare cose come:

public T GetById (int id) {...}

Ma questo non aiuta molto quando qualcuno inizia a confondere con le querystring per vedere cose a cui non è permesso.

Per comporlo, alcuni oggetti sono figli profondamente nidificati dell'oggetto genitore su cui dovrebbe essere eseguita l'autorizzazione.

Ad esempio blog - > autore - > post - > commento. In questo esempio inventato vorremmo dare agli autori la possibilità di modificare i propri post e commenti su quei post, ma non vedere o modificare quelli di altri autori. È facile controllare che il post appartenga all'autore, è un po 'più difficile assicurarsi che il commento appartenga all'autore. Abbiamo alcuni casi che vanno più in profondità.

Quindi ... come facciamo l'autorizzazione (nel modello o nel repository)?

È stato utile?

Soluzione

Potresti implementare il modello Decorator - suppongo che stai usando un contenitore DP / IoC per iniettare i tuoi IRepositories?

Dovresti creare un ISecureRepository che verifichi che le chiamate effettuate siano valide per il tipo di utente / richiesta specifico, e quindi rinviate la chiamata a IRepository. Questo ti dà anche la possibilità di chiamare il metodo e quindi controllare il tipo restituito ...

Dovresti quindi configurare il tuo IoC per utilizzare un ISecureRepository racchiuso in IRepository ...

Sembra così semplice ...

Altri suggerimenti

Questa potrebbe essere una buona implementazione per le tue esigenze: http: // www .codeproject.com / KB / web-security / objectlevelsecurity.aspx , è un modello basato su ACL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top