Мой опыт при экспериментировании с пользовательской реализацией RBAC выглядит следующим образом:
Вы прочитали много литературы RBAC и думаете, что понимаете ее.Затем вы продолжаете и пытаетесь реализовать это, просто чтобы понять, что вы на самом деле не понимали этого вообще.В конце концов это будет иметь смысл по мере продвижения в проекте.
Исходя из вашего вопроса, вы уже знаете бизнес-домен, к которому хотите применить RBAC.Но пока забудем о реальных бизнес-объектах.Ваша реализация RBAC должна быть общей, то есть у вас есть схема БД, состоящая из таблиц Роль, Пользователь, Разрешение, Операция и т. Д.Тогда у вас будут объекты, которые сопоставляются с такими таблицами (отношение один к одному).
После того, как вы получите эту реализацию RBAC, ее можно будет смоделировать практически для любого бизнес-домена, напримеркак «Отправление», о котором вы упомянули.
Просто помните, что не все идеально ... Я улучшил / изменил / извлек из фактической литературы по RBAC, чтобы добавить пользовательские функции, повысить производительность и т. д..
Я некоторое время не работал над этим, поэтому надеюсь, что я прав в следующем:
- Пользователь: Экземпляры создаются и сохраняются в его вспомогательной таблице.
Роль: Экземпляры создаются и сохраняются в его вспомогательной таблице.Роли будут назначаться пользователям.
Разрешение: разрешение в основном представляет собой комбинацию операции над объектом.Разрешения назначаются ролям.
Операция: Операция - это просто все, что вы хотите.Это может быть CRUD (создание, чтение, обновление, удаление) или «печать», «поиск» или что-либо, что человек (или система) может выполнить над объектом (или группой объектов).
- Объект: это в основном все ваши объекты, составляющие ваш бизнес-домен.
Для еще большей мощности вы можете применить ограничения, чтобы применить огромное количество различных ограничений.
С помощью этой структуры вы сможете отобразить:
- Кто может назначать пользователей для отдела
- Кто может удалять их из отделов
- Сколько пользователейможет быть в отделе
- Какие пользователи (в зависимости от назначенных им ролей) могут быть в отделе
- Какие списки могут выполнять какие операции с отделом (создавать, читать, обновлять, удалятьих)
- и т. д.