Предоставлять специальные привилегии пользователю в RBAC - PullRequest
1 голос
/ 30 июня 2019

Я использую контроль доступа на основе ролей для авторизации в программном обеспечении предприятия.Я создал три класса: User, Role и Privilege.Пользователь имеет отношения многие ко многим с ролью, а роль имеет отношения многие ко многим с привилегиями.Одним из требований заказчика является добавление специальных привилегий для конкретного пользователя.Например, пользователь u имеет роль с именем r, и в соответствии с этим u может вызывать только услугу foo.Но я хочу добавить привилегию p, чтобы он тоже мог позвонить в службу bar, хотя эта роль не позволяет ему звонить bar.Единственное решение, которое приходит мне на ум, - это то, что Пользователь также имеет много-много отношений с Привилегией.Но я не думаю, что это хорошая идея.

1 Ответ

1 голос
/ 01 июля 2019

Если создание отношения «многие ко многим» между Пользователем и Привилегией не способствует созданию системы, которую вы создаете, то вы можете создать разовую роль для специальной привилегии.Например, если пользователь u имеет роли от r0 до rn с привилегиями p0 до pn, ни у одного из которых нет разрешения на доступ к ресурсу res1, вы можете создать специальную роль rs, что позволяет получить доступ к res1 и присвоить эту роль u.

Таким образом, алгоритм для создания специальной привилегии:

  1. Создать привилегию, p, который имеет доступ к нужному ресурсу
  2. Создайте роль r и назначьте p ему
  3. Назначьте r пользователю u

При такой схеме пользователь u теперь сможет получить доступ ко всем ресурсам, разрешенным с p0 по pn, плюс к ресурсу, доступному с помощью p, созданному на шаге (1).

Если эти специальные привилегии понадобятся многим пользователям (т. Е. Многим пользователям потребуется особый доступ к одному и тому же ресурсу), то роль можно использовать повторно.Например, при необходимости можно создать новую роль (шаг (2) в приведенном выше алгоритме) для каждого требуемого ресурса, и эту роль можно назначить нескольким пользователям.Если повторное использование не требуется, новая роль и привилегия могут создаваться каждый раз, когда требуется специальная привилегия.Преимущество последнего случая (без повторного использования) состоит в том, что он проще, чем первый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...