AFAIK,没有这样的配置启用策略的路径过滤器。作为解决方法,您可以为覆盖Controller的该区域创建基本控制器定义,并将安全性要求添加到:
[Authorize(Policy = "RequireElevatedRights")] public abstract class AdminController : Controller { }
然后你只需要确保该区域中的每个控制器都覆盖AdminController而不是Controller:
[Area("Admin")] public class HomeController : AdminController { public IActionResult Index() { return View(); } }
另一种解决方案是应用全局授权要求:
services.AddMvc(config => { config.Filters.Add(new AuthorizeFilter("AtLeast21")); }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddAuthorization(options => { options.AddPolicy("AtLeast21", policy => policy.Requirements.Add(new MinimumAgeRequirement(21))); }); services.AddHttpContextAccessor(); services.AddSingleton<IAuthorizationHandler, MinimumAgeHandler>();
在句柄中你应该检查该区域是否是特定区域:
IHttpContextAccessor _httpContextAccessor = null; public MinimumAgeHandler(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MinimumAgeRequirement requirement) { var mvcContext = context.Resource as AuthorizationFilterContext; var descriptor = mvcContext?.ActionDescriptor as ControllerActionDescriptor; if (!("Admin".Equals(descriptor.RouteValues["area"]))) { context.Succeed(requirement); } ........... }