L’atsortingbut héritant de AuthorizeAtsortingbute ne fonctionne pas

J’essaie actuellement d’implémenter la sécurité dans une nouvelle application ASP MVC 5, en fonction des rôles d’utilisateur. L’objective est d’empêcher les utilisateurs d’accéder à certains contrôleurs ou à certaines méthodes de contrôleur s’ils ne jouent pas un rôle spécifique (ou supérieur). D’après ce que j’ai lu sur la question jusqu’à présent, j’ai créé un atsortingbut qui hérite de AuthorizeAtsortingbute et qui ressemble à ceci (MyAppRole est une enum, btw):

[AtsortingbuteUsage(AtsortingbuteTargets.Class | AtsortingbuteTargets.Method, AllowMultiple = false, Inherited = true)] public sealed class AuthorizeRoleOrSuperiorAtsortingbute : AuthorizeAtsortingbute { private MyAppRole _authorizedRole; public AuthorizeRoleOrSuperiorAtsortingbute(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); } } 

Et je l’appelle ainsi sur les méthodes et / ou les contrôleurs:

 [AuthorizeRoleOrSuperior(MyAppRole.Admin)] public class MyController : Controller { [AuthorizeRoleOrSuperior(MyAppRole.Admin)] public ViewResult Index() { [...] } [...] } 

J’ai placé un point d’arrêt sur le constructeur et la méthode OnAuthorization, mais lorsque je lance l’application et appelle le contrôleur ou la méthode concernés, je ne frappe jamais aucun d’eux et l’action est appelée, même si je ne suis même pas connecté.

Remarque: AuthorizeAtsortingbute fonctionne correctement lorsque je l’utilise.

Une idée de ce qui pourrait empêcher l’atsortingbut de fonctionner et de filtrer les access?

Vous héritez de l’atsortingbut de System.Web.Http.AuthorizeAtsortingbute? Cela fonctionne différemment de System.Web.Mvc.AuthorizeAtsortingbute.

Essayez plutôt d’hériter de System.Web.Mvc.AuthorizeAtsortingbute.

 [AtsortingbuteUsage(AtsortingbuteTargets.Class | AtsortingbuteTargets.Method, AllowMultiple = false, Inherited = true)] public sealed class AuthorizeRoleOrSuperiorAtsortingbute : System.Web.Mvc.AuthorizeAtsortingbute { private MyAppRole _authorizedRole; public AuthorizeRoleOrSuperiorAtsortingbute(MyAppRole authorizedRole) { //Breakpoint here _authorizedRole = authorizedRole; } public override void OnAuthorization(AuthorizationContext filterContext) { //Breakpoint here base.OnAuthorization(filterContext); if (!UserInfo.GetUserRoles().Any(r => (int)r >= (int)_authorizedRole)) throw new UnauthorizedAccessException(ErrorsModule.RoleMissing); } } 

Cela devrait au moins vous faire atteindre le point d’arrêt.

Remarque différence de paramètre dans: OnAuthorization(AuthorizationContext filterContext) et public override void OnAuthorization(HttpActionContext actionContext)

Vous pouvez également définir filterContext.Result = new HttpUnauthorizedResult(); pour obtenir le code de statut HTTP 401 correct.