提问人:Shrinith poojary 提问时间:10/10/2023 最后编辑:Shrinith poojary 更新时间:10/10/2023 访问量:57
如何在 .NET 6 中对不同的控制器使用基于权限的授权
How to use permission-based authorization for different controllers in .NET 6
问:
我想在不同的控制器中实现基于权限的授权
我已经为天气预报屏幕实现了基于权限的授权。现在,如果我想为不同的控制器(例如品牌控制器)创建一组权限,我该怎么做,以及如何在授权时处理该权限。 我是 .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;
}
}
答: 暂无答案
评论