Модель базы данных Best Role-Based Access Control (RBAC) [закрыто]
какова наилучшая схема базы данных для отслеживания управления доступом на основе ролей для веб-приложения?
Я использую Rails, но плагин RBAC, связанный с Google, выглядит неподдерживаемым (только 300 коммитов на SVN; последний был почти год назад).
концепция достаточно проста для реализации с нуля, но достаточно сложна и важна, чтобы ее стоило исправить.
Итак, как другие архитекторы и реализуют свою модель RBAC?
10 ответов
к моим довольно основным знаниям в этой области, основными субъектами РБАК являются:
- ресурсы.
- разрешения.
- пользователи.
- роли (т. е. группы).
ресурсы (один или несколько) разрешения.
роли (один или несколько) разрешения.
пользователи (один или несколько) роли.
таблицы для такой модели:
- разрешение
- роль
- пользователей
- role_permission
- user_role
теперь вы можете включить ресурсы здесь, а также, если вы хотите, чтобы пользователи вашего приложения могли настроить, какие разрешения a потребность в ресурсах. Но мне это никогда не было нужно. Надеюсь, это поможет.
Я работаю над подсистемой RBAC здесь, на работе в данный момент... какое совпадение.
моя модель основана на строительных блоках различных объекты в системе, требующей разрешений, будь то атрибуты для просмотра / обновления или действия для выполнения. Есть также, конечно, разные роли в системе (которую можно дать пользователям), и клей, который держит все это вместе, - это правила доступа, которым соединяет определенную роль, конкретную сущность, нуждающуюся в разрешении, и разрешение удовлетворено. Правило доступа может выглядеть следующим образом:
rule 14: guest role + page name + read permission
rule 46: approver role + add column + execute permission
и так далее. Я оставлю ЭРД в качестве упражнения для читателя ;-) если у вас есть вопросы, оставьте комментарий.
Юваль =8-)
Я думаю, что ответ на ваш вопрос идет так глубоко, как вы желаете. Если вы подумаете о том, чтобы поместить роли в группы, а затем связать группы с пользователями, этого будет недостаточно. В конце концов вам нужно будет предоставить определенные разрешения пользователю на определенный объект (форум, видео и т. д.).
Я ближе к ответу Юваля, все, что нам нужно, это связать объекты проекта + действия + пользователи. Чтобы обеспечить это; базовый объект (сущность) имеет смысл. Любой объект наследование от сущности может быть легко связано с действием user + таким образом.
поскольку вы также хотите, чтобы все было просто; мое предложение было бы;
- любой объект из-за ограничений rbac должен быть производным от базового объекта.
- должен быть список ролей, которые связаны один к одному с сущностью.
- там должен быть список отношений между пользователями и ролями.
чтобы сделать еще один шаг вперед, я бы также рекомендуется следующее (для автоматизированного rbac)
- Я использую служебный доступ к моим объектам. То есть; я создаю репозитории объектов (которые делают db-access для меня), и я получаю доступ к репозиториям через сервисные функции.
- Я использую пользовательский атрибут в начале каждой функции службы. Это определяет необходимую роль для доступа к этой функции.
- Я использую параметр User для доступа ко всем моим функциям службы, и каждая функция службы выполняет проверка роли перед выполнением. Рефлексия помогает мне понять, какую функцию я вызываю, и какую роль она имеет (через пользовательские атрибуты)
- Я также запускаю инициализатор при запуске приложения, и он проверяет все функции (и их атрибуты) и видит, добавил ли я новую требуемую роль. Если есть роль, которую я только что добавил и не отображается в БД, она создает ее в БД.
но, увы, это просто доступно для .NET, насколько я знаю Java не имеет пользовательских атрибутов, поэтому это еще не вероятно, будет доступно для Java.
Я хотел бы привести несколько примеров кода, но я слишком ленив для этого. Тем не менее, если у вас есть вопросы о моем способе rbac; вы можете спросить Здесь, и я обязательно отвечу.
Требование К Роли работает с RESTful проверки подлинности очень хорошо представить ролевое авт функций и ухоженные.
попробуйте https://github.com/ThoughtWorksStudios/piece, это механизм правил для управления доступом на основе ролей пользователей:
- определить правила контроля доступа
- объединить правила для создания новых правил
вы можете найти полный пример приложения Rails здесь:https://github.com/xli/piece-blog
для приложений .net вы должны посмотреть что-то вроде Visual Guard http://www.visual-guard.com/ чтобы избежать необходимости обрабатывать разрешения и роли с нуля.
также для .net у вас есть поставщики членства и ролей и авторизация, обрабатываемые с конфигурацией. http://www.odetocode.com/Articles/427.aspx
Мне очень нравится этот пост в блоге, http://pivotallabs.com/users/nick/blog/articles/272-access-control-permissions-in-rails.
EDIT:
кажется, что ryanb железнодорожных сообщений думал в том же направлении и создал драгоценный камень под названием канкан https://github.com/ryanb/cancan используя основной метод подобный столбу pivotollabs.
введение в RBAC -
система управления доступом на основе ролей-это метод ограничения доступа к "некоторым источникам или приложениям или некоторым функциям приложений" на основе ролей пользователей организации.
здесь ограничения могут быть с помощью нескольких разрешений, которые создаются администратором для ограничения доступа, и эти разрешения в совокупности представляют собой роль, которая будет назначена пользователю.
и если мы пойдем немного глубже RBAC, он в основном содержит 3 функции.
1) аутентификации подтверждает личность пользователя. Обычно это делается через учетные записи пользователей и пароли или учетные данные.
2) авторизация-определяет, что пользователь может делать и не может делать в приложении. Бывший. ‘Изменение порядка’ а ‘создание нового заказа не допускаются.
3) аудит действий пользователя в приложениях. - Он отслеживает действия пользователя в приложениях, а также Кто предоставил какие доступ к каким пользователям?
Это было очень основное изображение вида сверху системы RBAC.
базовая структура системы RBAC может содержать следующие компоненты: Пользователи, роли, разрешения или ограничения, ресурсы.
- разрешения или ограничения-разрешения представляют доступ к ресурс приложения.
- роль-содержит коллекцию разрешений
- User-одна или несколько ролей, назначенных пользователю, поэтому в конечном итоге пользователь содержит разрешения с помощью роли.
в дополнение к этому, вы также можете иметь коллекцию пользователей, называемых группами, и роль может быть назначена группам, если вы хотите поддерживать сложные сценарии. Итак, это была очень основная информация о структуре RBAC.