Como verificar múltiplas roles de um usuário no ASP.NET MVC - R Andrade
Como verificar múltiplas roles de um usuário no ASP.NET MVC
11 de abril de 2016 by Paulo Roberto Ramos de Andrade Leave a Comment
Neste artigo, vamos aprender como checar múltiplas roles de um usuário autenticado quando ele acessa uma action no ASP.NET MVC, procedimento simples, mas não muito claro.
Todo o código fonte deste artigo está neste repositório do GitHub, você é meu convidado a estudá-lo!
No caso, eu fiz um projeto Web Application no Visual Studio 2015, porém, um Empty Project, apenas com as referências do MVC. Meu objeto aqui é montar um produto mínimo viável que exige autenticação para a execução de Actions.
Como projetos Web Applications vazias, com apenas a referência do MVC, são tem nenhum tipo de autenticação, eu também tive que ativar a Forms Authentication dentro do web.config. No caso:
Como eu preciso ter uma página de login, fiz a Action Login dentro do Home Controller. A lógica dela é bem primária, e de forma até proposital. O que importa no caso é que temos 4 usuários:
Fulano, com roles Admin e Manager
Sicrano, com role Admin
Beltrano, com roles Admin e User
Outrano, com role User
Vale destacar que a Forms Authentication é a forma mais básica de autenticação no ASP.NET, utilizando um cookie de autenticação para lembrar quem é o usuário e quais suas roles – o que significa que esta autenticação funciona muito bem para sites, mas não para apps mobile que acessam back-ends – embora a lógica de verificação de roles deste artigo seja EXATAMENTE A MESMA.
Agora para que este jeito bem básico de autenticação que eu fiz seja reconhecido pelo ASP.NET sem precisar de configuração de banco de dados, eu tive que usar uma abordagem bem especial no Global.asax:
Finalmente, podemos checar o que faz cada atributo de autenticação:
public string ActionProtegida()
Esta action é a mais simples. O atributo Authorize avisa para o ASP.NET que apenas usuários autenticados podem acessá-la. Ou seja, no nosso exemplo, os 4 usuários podem acessar.
public string ActionProtegidaParaAdmin()
Agora nós passamos o parâmetro Roles no atributo Authorize. Neste caso, apenas os usuários autenticados e que tenham a role Admin podem acessar esta action. Ou seja, no nosso exemplo, o usuário Outrano não pode acessar esta action.
public string ActionProtegidaParaAdminOuManager()
É aqui que começamos a checar pela presença de múltiplas Roles. Neste caso, qualquer usuário autenticado que tenha a role Admin ou a role Manager podem acessar esta action. Apenas uma das roles já é suficiente, o usuário não precisa ter as duas roles.
public string ActionProtegidaParaAdminEManager()
Agora se você coloca duas linhas do atributo Authorize, isso significa que o usuário precisa ter as roles discriminadas. Neste caso, o usuário precisa ter a role Admin e também a role Manager. No nosso exemplo, apenas o usuário Fulano pode acessar a action.
[Authorize(Roles = "Manager,User")]
public string ActionProtegidaParaAdminManagerOuAdminUser()
E sim, você pode misturar ambas as lógicas! Este é o exemplo mais complexo, exigindo que o usuário tenha a role Admin e pelo menos uma das outras roles, Manager ou User. Apenas Admin não entra na action, apenas Manager não entra na action, apenas User não entra na action e se o usuário for Manager e User… também não entra! As combinações autorizadas nesta action são Admin e Manager (pois estão em atributos diferentes) ou Admin e User (pois estão em atributos diferentes!).
Com isso, agora você já sabe como validar múltiplas roles na mesma action do ASP.NET MVC!
[]'s Paulo Roberto
Filed Under: ASP.NET MVC, Autenticação e Autorização, Todas as postagens Tagged With: .net, asp.net, autenticação, autorização, mvc