Детальные разрешения с определенными требованиями для сайта MVC

Мне не нравятся встроенные провайдеры членства. Решил покататься самостоятельно. Я пытаюсь придумать хороший способ выполнения авторизации на уровне действий. Вот требования, которые я пытаюсь выполнить :

  1. Использование атрибутов - мне это нравится, поскольку он управляет на очень высоком уровне в стеке вызовов и является хорошим местом для организации разрешений.
  2. Нет волшебных строк - это причина, по которой я отклоняюсь от текущих поставщиков ролей. Я не Я не хочу оставлять строки, которые нельзя легко переименовать.
  3. Разрешения должны состоять из одного другого разрешения. Пример: ReadWrite имеет разрешение на чтение . Точно так же, как or'ing с enum.

ПРИМЕЧАНИЕ: Некоторые думают, что этот набор требований слишком широк (см. Комментарии). Я так не думаю, я думаю, что они довольно простые.

Самым большим препятствием является использование атрибутов. Могут быть только «постоянные выражения, выражения типа или выражение создания массива с типом параметра атрибута».

Я думал о том, чтобы сделать что-то подобное, чтобы операции имели статический доступ. Внутри атрибута он "преобразовал бы" int в фактическое Разрешение или что-то в этом роде ...:

public static class Operations
{
    public static class SectionA
    {
        public const int Read = 1;
        public const int ReadWrite = 2;
    }

    public static class SectionB
    {
        // ... and so on...
    }
}

Но это действительно ограничивает композицию. Я' Я уверен, что вы думаете: "Почему бы вам не пойти по маршруту enum?" ну, я хочу спланировать, что что-то изменится, и не хочу ограничиваться 32 (int) или 64 (long) операциями, и мне придется потом произвести массовую перезапись (также в базе данных, которая просто уродлива).

Кроме того, если есть лучшая альтернатива, чем атрибуты для действий / контроллеров, то я все слышу для предложений.

РЕДАКТИРОВАТЬ: Также из этого сообщения я читал о BitArray ] учебный класс. Это кажется некрасивым , особенно с произвольным хранением в базе данных.

8
задан Community 23 May 2017 в 12:30
поделиться