Авторизация ролей в Asp.Net Core 3 с добавлением ролей из свойств класса - PullRequest
0 голосов
/ 18 октября 2019

Я знаком с тем, как использовать заголовок 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";

1 Ответ

1 голос
/ 18 октября 2019

Вы можете реализовать пользовательский атрибут:

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

Использование:

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