我一直在.net应用程序中使用角色授权。但是,我正在构建一个演示应用程序,并希望尝试索赔。我一直在这样装饰我的控制器,在其中可以授予管理员或具有完全访问权限的用户的权限。
[[Authorize(Roles = "IsApiUserFullAccess", "IsAdmin") ]]
但是,我无法通过索赔完成相同的任务。在我的创业公司中,我有这两个索赔政策。如何装饰我的控制器或更改这些策略以使任一声明均由我的控制器授权?
options.AddPolicy("IsApiUserFullAccess", policy => policy.RequireClaim("apiuser.fullaccess", "true"));
options.AddPolicy("IsAdmin", policy => policy.RequireClaim("administrator", "true"));
一种方法是使用需求和处理程序来构建自定义策略,以对用户的声明进行“或”操作,例如:
// Marker class
public class HasFullAccessOrAdminRequirement : IAuthorizationRequirement {}
public class HasFullAccessOrAdminHandler
: AuthorizationHandler<HasFullAccessOrAdminRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
HasFullAccessOrAdminRequirement requirement)
{
var user = context.User;
if (user.HasClaim(...) || user.HasClaim(...))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
然后注册:
options.AddPolicy("AdminOrFullAccess", builder =>
builder.AddRequirements(new HasFullAccessOrAdminRequirement());
然后使用它:[Authorize("AdminOrFullAccess")]