Как добавить глобальный "AuthorizeFilter" или "AuthorizeAttribute" в ASP.NET Core?
В ASP.NET MVC 4 и ниже мы просто добавляем следующее в Global.asax:
GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });
Любая идея, как это сделать в ASP.NET Core MVC?
Ответы
Ответ 1
От docs:
Вы можете зарегистрировать фильтр по всему миру (для всех контроллеров и действий) добавив его в коллекцию MvcOptions.Filters
в ConfigureServices
в классе Startup
:
Вы не можете добавить AuthorizeAttribute
в MvcOptions.Filters
. Создайте AuthorizationPolicy
и используйте AuthorizeFilter
:
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireRole("Admin", "SuperUser")
.Build();
services.AddMvc(options =>
{
options.Filters.Add(new AuthorizeFilter(policy));
});
Ответ 2
Вы также можете использовать приведенный ниже код. Это использует тип, а не экземпляр.
services.AddMvc(options =>
{
options.Filters.Add(typeof(AuthorizeFilter));
});
И используя Dependency Injection вы можете разрешить объект политики.
Ответ 3
Если вы используете Razor Page flavor из ASP.NET Core 2.0, вы можете добавить глобальные фильтры следующим образом:
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizeFolder("/"); // Require users to be authenticated.
options.Conventions.AuthorizeFolder("/", "YourPolicyName"); // Require a policy to be full filled globally.
});