No momento, eu decorei um método como este para permitir que "membros" acessem minha ação do controlador
[Authorize(Roles="members")]
Como permito mais de uma função? Por exemplo, o seguinte não funciona, mas mostra o que estou tentando fazer (permitir acesso a "membros" e "administrador"):
[Authorize(Roles="members", "admin")]
asp.net-mvc
controller
roles
codette
fonte
fonte
Respostas:
Outra opção é usar um único filtro de autorização conforme você postou, mas remova as cotações internas.
fonte
Se você deseja usar funções personalizadas, pode fazer o seguinte:
CustomRoles
classe:Uso
Se você tem poucos papéis, talvez você possa combiná-los (para maior clareza) como este:
Uso
fonte
Uma possível simplificação seria a subclasse
AuthorizeAttribute
:Uso:
Semanticamente, é o mesmo que a resposta de Jim Schmehil.
fonte
Para o MVC4, usando a
Enum
(UserRoles
) com minhas funções, eu uso um costumeAuthorizeAttribute
.Na minha ação controlada, faço:
E eu uso um costume
AuthorizeAttribute
assim:Isso faz parte do FNHMVC modificado de Fabricio Martínez Tamayo https://github.com/fabriciomrtnz/FNHMVC/
fonte
Outra solução clara, você pode usar constantes para manter a convenção e adicionar vários atributos [Autorizar]. Veja isso:
Então no controlador:
fonte
Authorize
atributos empregam semântica AND e exigem que TODAS as condições sejam atendidas (ou seja, o usuário deve estar nas funções de Administrador e Convidado).Se você aplicar essas duas funções com frequência, poderá envolvê-las em sua própria Autorização. Esta é realmente uma extensão da resposta aceita.
E, em seguida, aplique sua nova autorização à Ação. Eu acho que isso parece mais limpo e lê facilmente.
fonte
Melhor código com a adição de uma subclasse
AuthorizeRole.cs
Como usar isso
fonte
Usando o AspNetCore 2.x, você precisa seguir um caminho um pouco diferente:
basta usá-lo assim:
fonte
fonte