Lassen Sie die Methode von der Klassenberechtigung AuthorizeAttribute ab?

8

Ich habe eine Klasse ApiController mit 10 öffentlichen Methoden drin.

Von diesen 10 Methoden benötigen neun [Authorize(Roles="Admin")] . Derjenige, der dies nicht tut, benötigt keine Autorisierung.

Wenn es nicht diese einzige Methode gäbe, die keine Autorisierung erfordert, würde ich die Klasse ApiController mit [Authorize(Roles="Admin")] dekorieren.

Statt auf Klassenebene dekoriere ich alle neun Methoden mit der gleichen [Authorize(Roles="Admin")] und dekoriere diese Methode nicht mit [Authorize(...)] .

Was mir nicht gefällt ist, dass ich das gleiche [Authorize(Roles="Admin")] neun Mal wiederholen muss.

Gibt es eine Möglichkeit, dass ich stattdessen die Klasse mit [Authorize(Roles="Admin")] dekorieren kann und nur die einzelne Methode dekoriere, die nicht [Authorize(Roles="Admin")] haben sollte, mit einem Attribut, das so etwas wie "wendet nicht die Klassenebene an Aktionsfilter für diese spezifische Methode "?

    
core 20.05.2015, 14:56
quelle

1 Antwort

10

Sie können die [AllowAnonymous] verwenden. Attribut Ich habe dies bei der Login-Aktion getan, als sich beispielsweise eine Website in der Vorschau befand, sodass jeder die Anmeldeseite sehen kann, aber niemand kann den Rest der Seite sehen, bis er sich anmeldet. Es war eine einfache Umgehungsmöglichkeit für einen Client: -)

Tatsächlich habe ich sogar ein benutzerdefiniertes Attribut geschrieben, das die Einstellung aus der Datenbank liest, also könnte ich die Website in "lockdown" setzen, wenn Sie verstehen, was ich meine.

    
Tom Chantler 20.05.2015, 14:58
quelle