asp.net-core - 如何在 .Net Core AuthorizationHandler 中授权资源子集
问题描述
我有一个AuthorizationHandler
以 aList<Guid>
作为资源的实现。我检查每个 guid 以查看当前用户是否有权访问此特定资源。我的问题是,如果我发现他们可以访问某些指南但不能访问其他指南怎么办?有没有办法通过修改以下代码将这种情况反映给控制器,还是我需要单独授权列表中的每个 guid?
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement, List<Guid> resource)
{
Guid myId = Guid.Parse(context.User.Claims.FirstOrDefault(c => c.Type == "SomeClaim").Value);
var allAccessableGuids = GetTheGuids(myId);
foreach(var id in resource)
{
if(allAccessableGuids.FirstOrDefault(u => u.Id == id) == null)
{
return Task.CompletedTask;
}
}
context.Succeed(requirement);
return Task.CompletedTask;
}
如果发现一个 guid 未经授权,该代码当前将无法通过整个列表。请注意,为简单起见,变量名称和方法已更改。
解决方案
推荐阅读
- visual-studio-code - VS Code 只有一个时不显示子文件夹
- c - GCC 的新手 - 运行数组插入在本地提供与在线编译器不同的输出
- html - 两个 Bootstrap 列周围的边距导致中断到下一行
- javascript - 在提交模态表单之前执行代码
- python - 将 Python 项目及其依赖项打包到另一台没有 Internet 和不同操作系统的机器上
- python - Exercism.io 上 Python Pangram Checker 中的错误
- php - sortBy 返回对象而不是数组
- python - 如何指定与 python sounddevice 一起使用的录音设备
- tensorflow - 从检查点加载 BERT 时评估精度不同
- sql - 如何添加/减去具有空值的多个选择语句