如何在 .NET 6 中对不同的控制器使用基于权限的授权

How to use permission-based authorization for different controllers in .NET 6

提问人:Shrinith poojary 提问时间:10/10/2023 最后编辑:Shrinith poojary 更新时间:10/10/2023 访问量:57

问:

我想在不同的控制器中实现基于权限的授权

我已经为天气预报屏幕实现了基于权限的授权。现在,如果我想为不同的控制器(例如品牌控制器)创建一组权限,我该怎么做,以及如何在授权时处理该权限。 我是 .NET 的新手。

[HasPermission(Permission.ViewForecast)]
    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }

public class HasPermission : AuthorizeAttribute
{
    public HasPermission(string permission): base(policy:permission)
    {
        
    }
}

这些是我创建的权限

public class Permission
{
    public const string CreateForecast = "Permission.WeatherForecast.Create";
    public const string ViewForecast = "Permission.WeatherForecast.Read";
    public const string UpdateForecast = "Permission.WeatherForecast.Update";
    public const string DeleteForecast = "Permission.WeatherForecast.Delete";
}

这是权限处理程序

public class PermissionAuthorizationHandler : AuthorizationHandler<PermissionRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement)
    {
        var permissions = context.User.Claims.Where(x => x.Type == CustomClaims.permissions)
                                                .Select(x => x.Value).ToHashSet();           
        if (permissions.Contains(requirement.Permission))
        {
            context.Succeed(requirement);
        }
        return Task.CompletedTask;
    }
    
}
asp.net 实体框架 asp.net-identity

评论

0赞 Shrinith poojary 10/10/2023
我被困在处理这些权限上。我将尝试通过添加代码而不是使用图像来编辑我的问题

答: 暂无答案