Obecnie dekoruję taką metodę, aby umożliwić „członkom” dostęp do mojej akcji kontrolera
[Authorize(Roles="members")]
Jak zezwolić na więcej niż jedną rolę? Na przykład poniższe polecenie nie działa, ale pokazuje, co próbuję zrobić (zezwól na dostęp dla „członków” i „administratora”):
[Authorize(Roles="members", "admin")]
asp.net-mvc
controller
roles
kodeta
źródło
źródło
Odpowiedzi:
Inną opcją jest użycie pojedynczego filtra autoryzacji podczas publikowania, ale usunięcie wewnętrznych cytatów.
źródło
Jeśli chcesz użyć niestandardowych ról, możesz to zrobić:
CustomRoles
klasa:Stosowanie
Jeśli masz kilka ról, być może możesz je połączyć (dla jasności) w następujący sposób:
Stosowanie
źródło
Jednym z możliwych uproszczeń byłoby podklasa
AuthorizeAttribute
:Stosowanie:
Semantycznie jest to to samo, co odpowiedź Jima Schmehila.
źródło
W przypadku MVC4, używając
Enum
(UserRoles
) z moimi rolami, używam niestandardowegoAuthorizeAttribute
.Po moim kontrolowanym działaniu robię:
I używam takiego zwyczaju
AuthorizeAttribute
:Jest to część zmodyfikowanego FNHMVC autorstwa Fabricio Martínez Tamayo https://github.com/fabriciomrtnz/FNHMVC/
źródło
Kolejne jasne rozwiązanie, możesz użyć stałych, aby zachować konwencję i dodać wiele atrybutów [Autoryzuj]. Sprawdź to:
Następnie w kontrolerze:
źródło
Authorize
atrybutów wykorzystuje semantykę AND i wymaga spełnienia WSZYSTKICH warunków (tj. Użytkownik musi pełnić role administratora i gościa).Jeśli często stosujesz te 2 role, możesz zawinąć je we własną autoryzację. To naprawdę rozszerzenie przyjętej odpowiedzi.
A następnie zastosuj nową autoryzację do akcji. Myślę, że to wygląda na czystsze i czyta się łatwiej.
źródło
Lepszy kod dzięki dodaniu podklasy
AuthorizeRole.cs
Jak tego użyć
źródło
Korzystając z AspNetCore 2.x, musisz przejść nieco inną drogę:
użyj tego w następujący sposób:
źródło
źródło