Схема БД для RBAC с несколькими уровнями ролей - PullRequest
6 голосов
/ 07 сентября 2011

Я пытаюсь придумать схему БД для RBAC и хочу иметь возможность создавать "отделы" и "должности".Должности будут расширять общие привилегии отделов.Должен ли я просто создать единую таблицу «ролей», содержащую как должности, так и отделы?Или я должен создать 3 таблицы: должности, отделы и роли, при этом таблица должностей и отделов имеет внешний ключ к таблице ролей?Спасибо заранее за помощь всем!Приветствия.

Ответы [ 2 ]

18 голосов
/ 01 октября 2011

Мой опыт при экспериментировании с пользовательской реализацией RBAC выглядит следующим образом:

  1. Вы прочитали много литературы RBAC и думаете, что понимаете ее.Затем вы продолжаете и пытаетесь реализовать это, просто чтобы понять, что вы на самом деле не понимали этого вообще.В конце концов это будет иметь смысл по мере продвижения в проекте.

  2. Исходя из вашего вопроса, вы уже знаете бизнес-домен, к которому хотите применить RBAC.Но пока забудем о реальных бизнес-объектах.Ваша реализация RBAC должна быть общей, то есть у вас есть схема БД, состоящая из таблиц Роль, Пользователь, Разрешение, Операция и т. Д.Тогда у вас будут объекты, которые сопоставляются с такими таблицами (отношение один к одному).

После того, как вы получите эту реализацию RBAC, ее можно будет смоделировать практически для любого бизнес-домена, напримеркак «Отправление», о котором вы упомянули.

Просто помните, что не все идеально ... Я улучшил / изменил / извлек из фактической литературы по RBAC, чтобы добавить пользовательские функции, повысить производительность и т. д..

Я некоторое время не работал над этим, поэтому надеюсь, что я прав в следующем:

  • Пользователь: Экземпляры создаются и сохраняются в его вспомогательной таблице.
  • Роль: Экземпляры создаются и сохраняются в его вспомогательной таблице.Роли будут назначаться пользователям.

  • Разрешение: разрешение в основном представляет собой комбинацию операции над объектом.Разрешения назначаются ролям.

  • Операция: Операция - это просто все, что вы хотите.Это может быть CRUD (создание, чтение, обновление, удаление) или «печать», «поиск» или что-либо, что человек (или система) может выполнить над объектом (или группой объектов).

  • Объект: это в основном все ваши объекты, составляющие ваш бизнес-домен.

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

С помощью этой структуры вы сможете отобразить:

  • Кто может назначать пользователей для отдела
  • Кто может удалять их из отделов
  • Сколько пользователейможет быть в отделе
  • Какие пользователи (в зависимости от назначенных им ролей) могут быть в отделе
  • Какие списки могут выполнять какие операции с отделом (создавать, читать, обновлять, удалятьих)
  • и т. д.
4 голосов
/ 07 сентября 2011

Стандарты? Это вопрос без ответа, так как ничего подобного не существует. RBAC всегда настраивается в соответствии с требованиями.

Возможно, вы захотите увидеть следующие ресурсы:

Архивная версия вышеуказанной ссылки (https://web.archive.org/web/20110718210859/http://www.sitepoint.com/forums/php-application-design-147/patterns-tutorial-series-part-1-rbac-domain-model-162027.html)

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