ASP.NET 中基于策略或基于角色的授权

问题描述 投票:0回答:1

我正在使用 Blazor WASM 构建 Web 应用程序,对于某些页面,我想使用以下逻辑实现授权:如果用户的角色是

Admin
或者他对应于特定策略,则可以访问此页面。

我试过这个:

[Authorize(Roles = "Admin", Policy = "Policy")]

但它会检查这两个条件。

c# asp.net-core authorization blazor-webassembly
1个回答
0
投票

首先,创建一个需求:

public class CustomPolicyRequirement : IAuthorizationRequirement
{
}

然后创建一个处理程序:

public class CustomPolicyHandler : AuthorizationHandler<CustomPolicyRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CustomPolicyRequirement requirement)
    {
        if (context.User.IsInRole(nameof(RoleName.Admin))
        // Check if user corresponds a policy
            || context.User.HasClaim(c => c.Type == ClaimTypes.Email && c.Value == "[email protected]")) 
        {
            context.Succeed(requirement);
        }

        return Task.CompletedTask;
    }
}

最后,添加策略并注册处理程序:

builder.Services.AddAuthorizationCore(opt =>
{
    opt.AddPolicy("Policy", policy => policy.Requirements.Add(new CustomPolicyRequirement()));
});

builder.Services.AddSingleton<IAuthorizationHandler, CustomPolicyHandler>();
© www.soinside.com 2019 - 2024. All rights reserved.