Asp.Net Core 3 中的角色授权从 class 属性中添加角色

Role Authorization in Asp.Net Core 3 adding roles from class properties

我熟悉如何在单授权和多授权场景中使用 Authorize header,但考虑到代码库中的以下预期更改,我不知道如何通过弄乱 [=31] 来实现它=] 具有多重授权的附加属性的代码。

我有以下 AuthorizationLevel class

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";
    }
}

在控制器中,如果我没有这个 class 我会做类似的事情

[Authorize(Roles = "Admins, Customers")]

但我更喜欢class定义所有角色,这样我就可以做类似

的事情
[Authorize(Roles = AuthorizationLevel.Roles.Admin, AuthorizationLevel.Roles.Customer)]

问题是在这种情况下,逗号后面的参数是一个策略,所以我试了一下。

[Authorize(Roles = $"{AuthorizationLevel.Roles.Admin}, {AuthorizationLevel.Roles.Customer}")]

编辑器不喜欢但应该有效,因为该代码应该创建逗号分隔的字符串。

我如何(或不能)在这种情况下使用此 class,而不必在组合多个级别的 class 中创建其他属性,即

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)]