O atributo herdado de AuthorizeAttribute não está funcionando
Atualmente, estou tentando implementar a segurança em um novo aplicativo ASP MVC 5, com base nas funções do usuário. O objetivo é impedir que os usuários acessem determinados controladores ou métodos de controlador se eles não tiverem uma determinada função (ou superior). Com base no que li sobre a questão até agora, criei um atributo que herda AuthorizeAttribute que se parece com isso (MyAppRole é um enum, btw):
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class AuthorizeRoleOrSuperiorAttribute : AuthorizeAttribute
{
private MyAppRole _authorizedRole;
public AuthorizeRoleOrSuperiorAttribute(MyAppRole authorizedRole)
{ //Breakpoint here
_authorizedRole = authorizedRole;
}
public override void OnAuthorization(HttpActionContext actionContext)
{ //Breakpoint here
base.OnAuthorization(actionContext);
if (!UserInfo.GetUserRoles().Any(r => (int)r >= (int)_authorizedRole))
throw new UnauthorizedAccessException(ErrorsModule.RoleMissing);
}
}
E eu chamo assim em métodos e / ou controladores:
[AuthorizeRoleOrSuperior(MyAppRole.Admin)]
public class MyController : Controller
{
[AuthorizeRoleOrSuperior(MyAppRole.Admin)]
public ViewResult Index()
{
[...]
}
[...]
}
Coloquei um ponto de interrupção no construtor e no método OnAuthorization, mas, quando inicio o aplicativo e ligo para o controlador ou método em questão, nunca bato em nenhum deles e a ação é chamada, mesmo que eu nem esteja logado.
Nota: o AuthorizeAttribute está funcionando corretamente quando eu o uso.
Alguma idéia do que poderia impedir o atributo de funcionar e filtrar acessos?