asp.net-core - 禁用某些页面的全局 IAuthorizationRequirement
问题描述
我有一个自定义 IAuthorizationRequirement 实现,我想根据用户的租户声明简单地验证用户是否被允许访问该页面。
public class TenantAccessRequirement : IAuthorizationRequirement
{
}
实际租户将在 AuthorizationHandler 中解析。此 IAuthorizationRequirement 在 Startup AddAuthorizationMethod 中全局应用
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireClaim(AuthorizationConstants.TenantIdClaimType)
.RequireAuthenticatedUser()
.AddRequirements(new TenantAccessRequirement())
.Build();
});
有些页面不是特定于租户的,所以我想覆盖要求,授权/允许匿名的工作方式相同。我怎样才能做到这一点?我不想从全局策略中删除租户访问要求,因为只有几个页面不是特定于租户的。最好的方法是覆盖 TenantaccessRequirement 的另一个属性。
我正在考虑的一个选项是为相同的要求注册另一个处理程序,并检查上下文的要求是否包含匿名租户要求。
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, TenantAccessRequirement requirement)
{
if (context.Requirements.Any(r => r.GetType() == typeof(AnonymousTenantRequirement)))
{
context.Succeed(requirement);
}
}
但这似乎有点脏,因为 AnonymousTenantRequirement 不是实际要求。
解决方案
推荐阅读
- css - 是否可以将背景图像放入 svg?
- python - 需要用列表解释奇怪的行为
- java - 以下方法的最坏情况 Big O 运行时
- angularjs - GCloud 错误:未找到在此服务器上未找到请求的 URL
- angular - 除非我清理浏览器,否则 https 重定向中的 CORS 策略已阻止访问 XMLHttpRequest
- java - 如何使用 dto 类一对多地编写两个对象?
- javascript - 反应多个项目删除?
- angular - 我们如何在初始页面加载时动态设置表单数组控件的错误
- java - 二维数组的 ArrayList
- gimp - 如何在 Python-Fu 中使用 file_ico_save 设置不同图标层的属性?