È possibile sovrascrivere un attributo che è stato applicato a livello di controller su un metodo specifico?

StackOverflow https://stackoverflow.com/questions/1213036

Domanda

Se ho applicato un attributo di autorizzazione a livello di controller, è possibile sovrascriverlo su uno dei metodi su quel controller?

Grazie

James

È stato utile?

Soluzione

Dipende dal tipo di "sostituzione" " tu vuoi. Non puoi rimuovere l'attributo che si trova nella classe, ma puoi aggiungere di nuovo l'attributo al metodo per rendere le cose più restrittive.

Aggiorna in risposta ai commenti. Innanzitutto, rendere il tuo AutorizeAttribute personale è alquanto pericoloso. AuthorizeAttribute contiene codice che interagisce con gli attributi di memorizzazione nella cache al fine di garantire che la cache non possa servire il contenuto protetto a un utente non autorizzato. Come minimo, è necessario sottotipare l'AttributoAttributo esistente anziché creare qualcosa di completamente nuovo. In genere, tuttavia, è una migliore idea utilizzare l'attuale AuthorizeAttribute e specializzare la tua autorizzazione creando un nuovo / trovando un provider di appartenenza ASP.NET esistente.

Non penso che sarebbe un buon progetto avere un filtro su un'azione che "sovrascrive" un filtro su un controller. Tuttavia, è possibile modificare il design del filtro sul controller per non richiedere l'autorizzazione per un'azione con un determinato nome. Ad esempio, è possibile sostituire il metodo AuthorizeAttribute.AuthorizeCore per testare un nome di azione nello stesso modo in cui il metodo esistente verifica il nome utente e i ruoli. Prendi nota con molta attenzione dei commenti in questo metodo sulla sicurezza dei thread.

Altri suggerimenti

Non sono sicuro che questa sia esattamente la stessa domanda, ma potrebbe aiutare ...

Come attivare ActionFilter il metodo di azione ha la precedenza sullo stesso ActionFilter sul controller

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