基于源码分析策略授权-初探
1.配置PermissionRequirement类
public class PermissionRequirement : AuthorizationHandler<PermissionRequirement>, IAuthorizationRequirement
{
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement)
{
await Task.CompletedTask;
context.Succeed(requirement);
return;
}
}
2.在program.cs文件中注册服务

// Claims声明
builder.Services.AddAuthorization(options =>
{
// 要求用户必须拥有一个名为 iss(issuer,签发者)的声明(Claim),且其值为 "Blog.Core"
options.AddPolicy("Client", policy => policy.RequireClaim("iss", "Blog.Core").Build());
// 用户必须属于 SuperAdmin 角色才能通过授权
options.AddPolicy("SuperAdmin", policy => policy.RequireRole("SuperAdmin").Build());
// 用户只要属于 SuperAdmin 或 System 角色之一即可
options.AddPolicy("SystemOrAdmin", policy => policy.RequireRole("SuperAdmin", "System"));
// 添加一个自定义授权需求(Requirement)
options.AddPolicy("Permission", policy => policy.Requirements.Add(new PermissionRequirement()));
});
// 自定义授权需求
builder.Services.AddScoped<IAuthorizationHandler, PermissionRequirement>();
3.对需要进入PermissionRequirement类的HandleRequirementAsync方法的控制器进行标识(该控制器请求时会进入该方法)

[Authorize(Policy = "Permission")]

浙公网安备 33010602011771号