基于源码分析策略授权-初探

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文件中注册服务
image

// 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方法的控制器进行标识(该控制器请求时会进入该方法)
image

[Authorize(Policy = "Permission")]
posted @ 2025-08-21 14:37  一切为了尚媛小姐  阅读(2)  评论(0)    收藏  举报