Qual è il modo migliore per implementare l'autorizzazione della proprietà del modello in un MVC ASP?

1

Abbiamo un'applicazione MVC con autorizzazione molto dettagliata e configurabile. Al momento abbiamo utilizzato l'attributo authorize per i nostri controller e le funzioni del controller.

Il prossimo progetto su cui lavoreremo richiederà che noi supportiamo un controllo a 3 stati. I 3 stati sono NoAccess, ReadAccess e FullAccess. NoAccess non richiede il rendering di alcun controllo, ReadAccess richiede il rendering di un'etichetta e FullAccess esegue il rendering di un controllo (casella di testo, menu a discesa, ecc.)

Il nostro primo approccio funzionante consisteva nell'aggiungere un dizionario al modello che contiene una chiave che identifica la proprietà e il valore di ciò che l'utente ha a disposizione della proprietà.

["FirstName", enumAccess.FullAccess]

Questo elemento verrà quindi passato in un'estensione html.

@html.TextboxFor(m => m.FirstName, Model.AccessDictionary["FirstName"])

L'estensione verrà quindi renderizzata in base al livello di accesso. NoAccess esegue il rendering di un oggetto nascosto, ReadAccess esegue il rendering di un'etichetta e un oggetto nascosto, FullAccess esegue il rendering di una casella di testo.

Il secondo approccio sarebbe quello di decorare la proprietà del modello con un attributo che dovrebbe specificare la chiave e nella casella di testo per l'estensione verificheremo gli attributi e verificheremo l'accesso con l'httpContext dell'utente che ha effettuato l'accesso. Questo secondo approccio non funzionerebbe per i nostri pulsanti di creazione o salvataggio poiché questi non sono legati al modello.

Ho cercato online alcuni esempi di configurazione complessa di viste e modelli, ma non ho ancora trovato nulla. Come accennato in precedenza, il primo approccio è al momento funzionante, ma non sembra molto elegante in quanto ogni sviluppatore richiede di compilare un dizionario su ogni modello e la vista ha molti punti di vista che potrebbero portare a aggiornamenti dannosi. Qualsiasi consiglio o direzione sarebbe molto apprezzato.

    
posta Leonardo 14.09.2018 - 20:01
fonte

1 risposta

1

La prima regola delle autorizzazioni a livello di campo è DO NOT. Se è solo per pochi campi su alcune piccole viste, quindi duplica le visualizzazioni per i diversi ruoli utente che hai.

Se i tuoi requisiti vanno oltre, i modelli a livello di campo (Editor e Visualizza modelli) saranno una buona soluzione in quanto potresti raggruppare più campi nello stesso modello e avere i tuoi dati di controllo degli accessi in un campo separato sul tuo modello di vista o su un richiamata al server.

Tuttavia, in definitiva le autorizzazioni a livello di campo diventano un incubo in una grande applicazione con molte viste complesse. Assicurati che il proprietario del tuo prodotto comprenda i costi e le complessità associati alle autorizzazioni a livello di campo e che il valore che porta giustifichi il costo.

    
risposta data 14.09.2018 - 20:48
fonte

Leggi altre domande sui tag