c# - Asp.Net Core 3 中的角色授权从类属性中添加角色
问题描述
我熟悉如何在单个和多个授权场景中使用 Authorize 标头,但是鉴于代码库中的以下预期更改,我无法弄清楚如何通过使用多个授权的附加属性来混淆类代码来实现这一点。
我有以下 AuthorizationLevel 类
public class AuthorizationLevel
{
public static class Roles
{
public const string Admin = "Admin";
public const string Developer = "DevOps";
public const string OfficeManager = "OfficeManager";
public const string Customer = "Customer";
public const string Distributor = "Distributor";
public const string Registered = "Basic";
}
}
在控制器中,如果我没有这个类,我会做类似的事情
[Authorize(Roles = "Admins, Customers")]
但我更喜欢有一个定义所有角色的类,所以我可以做类似的事情
[Authorize(Roles = AuthorizationLevel.Roles.Admin, AuthorizationLevel.Roles.Customer)]
问题是在这种情况下,逗号后面的参数是一个策略,所以我尝试了这个。
[Authorize(Roles = $"{AuthorizationLevel.Roles.Admin}, {AuthorizationLevel.Roles.Customer}")]
编辑器不喜欢并且应该工作,因为该代码应该创建一个逗号分隔的字符串。
我如何(或不能)在这种情况下使用这个类,而不是必须在类中创建组合多个级别的附加属性,即
public const string AdminCust = "Admin, Customer";
解决方案
您可以实现自定义属性:
public class RolesAttribute : AuthorizeAttribute
{
public RolesAttribute(params string[] roles)
{
if (roles != null)
Roles = string.Join(",", roles);
}
}
用法:
[Roles(AuthorizationLevel.Roles.Admin, AuthorizationLevel.Roles.Customer)]
推荐阅读
- twitter-bootstrap - 为什么 reactstrap 没有像 bootstrap 一样的行为?
- scala - Scala - 按键减少元组列表
- r - 后期进入生存分析的语法
- python - 使用 Tensorflow tf.data 在图形执行期间从时间序列特征创建图像
- python - 无法解释发生 SettingWithCopyError 的原因(Python 2.7,Pandas 0.20.3)
- c - 修复 C switch 语句函数溢出?
- r - R data.table 生成每列的唯一值
- django - Django - get_redirect_url() 导致找不到页面 (404)
- macos - 如何从目录和子目录中的txt文件中找到许多文件,然后将所有文件复制到新文件夹
- swift - Firebase ChildAdded 观察者正在检索不存在的数据