2015-05-20 19 views
8

Mam klasę ApiController z 10 metod publicznych w nim.Czy metoda rezygnuje z klasy AuthorizeAttribute na poziomie klasy?

Spośród tych 10 metod dziewięć wymaga [Authorize(Roles="Admin")]. Ten, który tego nie robi, nie wymaga żadnej autoryzacji.

Gdyby nie ta jedyna metoda, która nie wymaga autoryzacji, ozdabiałbym klasę ApiController z [Authorize(Roles="Admin")].

Zamiast na poziomie klasy, dekoruję wszystkie dziewięć metod tym samym [Authorize(Roles="Admin")] i nie dekoruję tej pojedynczej metody za pomocą [Authorize(...)].

To, co mi się nie podoba, to to, że muszę powtórzyć to samo [Authorize(Roles="Admin")] dziewięć razy.

Czy istnieje sposób, że mogę zamiast tego nadal dekorować klasę za pomocą [Authorize(Roles="Admin")] i dekorować tylko jedną metodę, która nie powinna mieć [Authorize(Roles="Admin")] z atrybutem, który oznacza coś w stylu "nie stosuj filtru akcji na poziomie klasy dla ta konkretna metoda "?

Odpowiedz

10

Możesz użyć atrybutu [AllowAnonymous]. Zrobiłem to w akcji logowania, gdy strona była na przykład w podglądzie, więc każdy może zobaczyć stronę logowania, ale nikt nie widzi reszty strony, dopóki się nie zaloguje. Było to proste obejście dla klienta :-)

W rzeczywistości napisałem nawet niestandardowy atrybut, który odczytał ustawienie z bazy danych, więc mogłem umieścić stronę w "blokadzie", jeśli rozumiesz, co mam na myśli.

+0

Tak więc '[AllowAhnonymous]' na metodzie zastąpi '[Authorize]' na klasie, tak? – core

+0

Zgadza się. Zobacz tutaj: http://weblogs.asp.net/jongalloway/asp-net-mvc-authentication-global-authentication-and-allow-anonymous –

Powiązane problemy