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)]
我熟悉如何在单授权和多授权场景中使用 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)]