2009-07-15 14 views
6

Sto lavorando a un'applicazione in cui stiamo cercando di mantenere Separation of Concerns il più fortemente possibile. Stiamo scoprendo che la preoccupazione trasversale della sicurezza crea una serie di complicazioni.AOP e applicazione della sicurezza agli elementi dell'interfaccia utente

Tuttavia, sembra che questi possano essere mitigati utilizzando gli attributi e la programmazione orientata agli aspetti.

Lo capisco per quanto riguarda l'applicazione di aspetti al codice del livello dominio, ma cosa succede se si desidera applicarlo agli elementi dell'interfaccia utente? Ad esempio, cosa succede se non desidero visualizzare un pulsante quando un utente non dispone dell'autorizzazione per l'esecuzione di tale funzionalità?

Nella nostra applicazione MVC, a questo punto avremmo dovuto scrivere (pseudo-codice segue):

<% if (user.CanSeeSomeData) { <%=Html.TextBox("MyTextBox") } %> 

Ma vorremmo controllare la visualizzazione con gli attributi alla l'AOP, se possibile.

Qualche idea?

Inoltre, se ci sono strumenti di terze parti, open source che potrebbero essere utili, questi suggerimenti sono benvenuti.

risposta

1

Direi che una vista non dovrebbe contenere molta programmazione (o niente del tutto). L'idea di usare AOP (o a la AOP) in un posto dove la P è proibita non sembra bella.

Progettiamolo in un modo diverso. Di solito le viste hanno alcune parole chiave di controllo per fare le cose di base: condizioni e cicli. Più intelligenza e direi che stai mescolando il ruolo del controller lì.

Quindi lo if (user.CanSeeSomeData) ci metti, se è in realtà una semplice bandiera. È il modo in cui le visualizzazioni dovrebbero essere.

Durante la creazione dell'oggetto modelview (il contenitore in cui si inseriscono le informazioni per la vista). Ad esempio, avresti potuto utilizzare AOP per inizializzare/impostare quell'informazione con un attributo piacevole in quella proprietà.

si poteva chiedere di attributi invece di "se"

[UserCanSeeData] 
<%=Html.TextBox("MyTextBox") %> 

Questo appare come zucchero sintattico, non reale AOP. Qualsiasi tentativo di dire che UserCanSeeData dovrebbe avere più di un if (come un accesso al database per controllare i privilegi degli utenti), è un tentativo di spostare il codice del controller nella vista.

+0

grazie per la risposta, graffic. Quindi, stai dicendo che l'approccio dell'attributo è OK, ma dovrebbe essere fatto in Conroller/ViewModel, o stai dicendo che l'istruzione if è il modo per farlo * ["È come dovrebbero essere le viste"] * – jlembke

+0

Inoltre, come realizzeresti questo nel ViewModel? Potrei inserire un attributo su una proprietà ma questo non si traduce in mostrare/nascondere/disabilitare gli elementi del modulo. Stai dicendo che * non dovrei * cercare di nascondere i controlli, ma solo gestire le violazioni di accesso in ViewModel/Controller? – jlembke

Problemi correlati