为什么需要多个处理程序?
- 条件 1:用户必须是 Admin 角色,并且拥有 claim.Type == “Edit Role” 且值为 true。并且登录用户 ID 不能与正在编辑的 Admin 用户 ID 相同
- 条件 2:用户必须是 Super Admin 角色,即可编辑角色和管理用户中的角色
SuperAdminHandler:
public class SuperAdminHandler : AuthorizationHandler<ManageAdminRolesAndClaimsRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ManageAdminRolesAndClaimsRequirement requirement)
{
if (context.User.IsInRole("Super Admin"))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
- 如果一个授权需求有多个处理程序,失败是优于成功的。这意味着当其中一个处理程序返回失败时即(context.Fail()),即使其他处理程序返回成功(context.Succeed()),策略也会失败
- 如果没有任何处理程序返回显式成功即(context.Succeed()),则该策略将不会成功
- 所以通常为了让策略能够成功,必须再其中一个处理程序返回显式成功,并且其他任何处理程序都不得返回显式失败
- 一般来说不建议在处理程序返回失败,因为满足相同要求的其他处理程序可能会成功