在 ASP.NET MVC 4 及以下,我们只需在Global.asax中添加以下内容:
GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });
知道如何在 ASP.NET Core MVC 中执行此操作吗?
答案 0 :(得分:40)
来自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));
});
答案 1 :(得分:5)
如果您使用Razor Page flavor of the 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.
});
答案 2 :(得分:4)
您也可以使用以下代码。这是使用类型而不是实例。
services.AddMvc(options =>
{
options.Filters.Add(typeof(AuthorizeFilter));
});
使用依赖注入,您可以解析策略对象。