c# - 多角色授权处理程序 - 仅获取方法角色
问题描述
我正在开发一个 .NET Core Web 应用程序,但我无法使用自定义授权属性处理程序。
我的目标是让自定义授权处理程序使用设置文件(业务需求)。
那么,问题是什么?我将提供尽可能少的代码来解释。
让我们从控制器开始
[Authorize(Roles = Roles.Full)]
[Authorize(Roles = Roles.Read)]
public class ConfigurationController : BaseController
{
...
[Authorize(Roles = Roles.Full)]
public async Task<ActionResult> Edit(ServiceConfigurationDto item)
{ .. }
}
目标是只有完全访问权限的用户可以保存数据......
(问题)现在在我的处理程序中,当用户单击保存时,我收到 3 个角色,而不是 1 个。
这是我的处理程序
public class RoleRequirementHandler : IAuthorizationHandler
{
public Task HandleAsync(AuthorizationHandlerContext context)
{
var succeed = false;
var pendingRequirements = context.PendingRequirements.ToList();
var requiredRoles = new List<RoleRequirement>();
foreach (var x in pendingRequirements)
{
requiredRoles.AddRange(((RolesAuthorizationRequirement)x).AllowedRoles.Select(x => new RoleRequirement(x)).ToList());
}
foreach (var x in requiredRoles)
{
if (x is RoleRequirement)
{
var prefix = "APPT"; // future from setting file
if (context.User.IsInRole(prefix + ((RoleRequirement)x).Role))
{
succeed = true;
}
}
};
if (succeed)
{
pendingRequirements.ForEach(x => context.Succeed(x));
}
return Task.CompletedTask;
}
}
它只适用于一个角色,但如果使用以前的 Edit 方法,Handler 会获得 3 个角色,并且无法通过它进行处理。
.....................
添加策略如下所示:
options.AddPolicy(Roles.Full,
policy => policy.Requirements.Add(new RoleRequirement(Roles.Full)));
对于每一个角色,
我也在使用 Cookie 身份验证方案
我会感谢任何建议:)
解决方案
这将在角色中使用“and”条件
[Authorize(Roles = Roles.Full)]
[Authorize(Roles = Roles.Read)]
这将使用“或”
[Authorize(Roles = "Full,Read")]
在控制器上,您尝试像这样指定或条件
[Authorize(Roles = "Full,Read")]
推荐阅读
- python - ModuleNotFoundError:python 中没有名为“rich.logging”的模块
- flask - Flask WTForms FormField/FieldList 预填充 + 提交
- excel - Excel 中的匹配值
- php - 在 Laravel 8 中从数据库中获取和打印数据
- java - 使用 java 在控制台中显示复选框
- javascript - Ionic 4 添加菜单
- mysql - 按月、年和经销商电子邮件计算订单利润
- javascript - 获取 API 等待已定义块大小的块
- eclipse - IntelliJ 和 STS 给出 javax.management.InstanceNotFoundException: for SpringBoot 项目
- swift - 使用“listAll”时出现 Swift 错误:“预期 gs://... 是 gs://... 的子元素”