mvc custom attribute asp.net-core asp.net-core-mvc

asp.net-core - custom - authorize roles



¿Cómo agregar un `AuthorizeFilter` o` AuthorizeAttribute` global en ASP.NET Core? (3)

En ASP.NET MVC 4 y más abajo, solo agregamos lo siguiente en Global.asax:

GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });

¿Alguna idea de cómo hacer esto en ASP.NET Core MVC ?


De los docs :

Puede registrar un filtro globalmente (para todos los controladores y acciones) agregándolo a la colección MvcOptions.Filters en el método ConfigureServices en la clase de Startup :

No puede agregar AuthorizeAttribute en MvcOptions.Filters . Cree una AuthorizationPolicy y use AuthorizeFilter :

var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .RequireRole("Admin", "SuperUser") .Build(); services.AddMvc(options => { options.Filters.Add(new AuthorizeFilter(policy)); });


En caso de que esté utilizando el sabor de Razor Page de ASP.NET Core 2.0 , podría agregar filtros globales de la siguiente manera:

services.AddMvc() .AddRazorPagesOptions(options => { options.Conventions.AuthorizeFolder("/"); // Require users to be authenticated. options.Conventions.AuthorizeFolder("/", "YourPolicyName"); // Require a policy to be full filled globally. });


También puede utilizar el siguiente código. Esto está utilizando un tipo en lugar de una instancia.

services.AddMvc(options => { options.Filters.Add(typeof(AuthorizeFilter)); });

Y utilizando la inyección de dependencia puede resolver la política Objeto.