首页 > 解决方案 > 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";

标签: c#asp.net-authorizationasp.net-core-3.0

解决方案


您可以实现自定义属性:

public class RolesAttribute : AuthorizeAttribute
{
    public RolesAttribute(params string[] roles)
    {
        if (roles != null)
            Roles = string.Join(",", roles);
    }
}

用法:

[Roles(AuthorizationLevel.Roles.Admin, AuthorizationLevel.Roles.Customer)]

推荐阅读