Подтвердить что ты не робот

Лучшая модель базы данных контроля доступа (RBAC)

Какова наилучшая схема базы данных для отслеживания элементов управления доступом на основе ролей для веб-приложения?

Я использую Rails, но плагин RBAC, связанный с Google, выглядит невосприимчивым (всего 300 записей для SVN, последний был почти год назад).

Концепция достаточно проста для реализации с нуля, но сложная и достаточно важная, чтобы ее можно было исправить.

Итак, как другие архитекторы и внедряют свою модель RBAC?

4b9b3361

Ответ 1

К моим довольно базовым знаниям в этой области, основными участниками RBAC являются:

  • Ресурсы.
  • Права доступа.
  • Пользователи.
  • Роли (т.е. группы).

Ресурсы < - require → (один или несколько) Разрешения.

Роли < - являются коллекциями → (одного или нескольких) Разрешений.

Пользователи < - могут иметь → (один или несколько) Роли.

Таблицами для такой модели будут:

  • Разрешение
  • роль
  • Пользователь
  • role_permission
  • USER_ROLE

Теперь вы можете также включить ресурсы, если вы хотите, чтобы пользователи вашего приложения могли настроить, какие разрешения необходимы ресурсу. Но мне это никогда не нужно. Надеюсь, что это поможет.

Ответ 2

Вот простая диаграмма, иллюстрирующая отличный ответ Амр Мостафа

enter image description here

Ответ 3

Я работаю над подсистемой RBAC здесь, когда работаю на них в момент... какое совпадение.

Моя модель основана на строительных блоках различных сущностей в системе, которые требуют разрешений, будь то атрибуты для просмотра/обновления или действия для выполнения. В системе также есть разные роли, которые могут быть предоставлены пользователям, а клей, содержащий всю совокупность, - это правило доступа, которое подключается определенная роль, конкретный объект, требующий разрешения, и разрешение. Правило доступа может выглядеть так:

rule 14: guest role + page name + read permission
rule 46: approver role + add column + execute permission

и т.д. Я оставлю ERD как упражнение для читателя;-) если у вас есть вопросы, оставьте комментарий.

Yuval = 8 -)

Ответ 5

Я думаю, что ответ на ваш вопрос идет так глубоко, как вы хотите. Если вам придётся подумать о том, чтобы вводить роли в группы, а затем ассоциировать группы с пользователями, будет недостаточно. В конце концов вам нужно будет предоставить определенные разрешения пользователю на конкретный объект (форум, видео и т.д.).

Я ближе к Yuval, все, что нам нужно, это связать объекты проекта + действия + пользователи. Предоставить это; базовый объект (Entity) имеет смысл. Любой объект, наследуемый от Entity, может быть легко связан с действием пользователя + таким образом.

Как вы также хотите, чтобы все было просто; мое предложение было бы;

  • Любой объект из-за ограничений rbac должен основываться на базовом Entity.
  • Должен быть список ролей, которые взаимно однозначно связаны с Entity.
  • Должен быть список отношений между пользователями и ролями.

Чтобы сделать еще один шаг, я также рекомендую следующее (для автоматизированного rbac)

  • Я использую сервисный доступ к моим объектам. То есть; Я создаю репозитории объектов (которые делают для меня db-access), и я получаю доступ к репозиториям через служебные функции.
  • Я использую пользовательский атрибут в начале каждой служебной функции. Это определяет требуемую роль для доступа к этой функции.
  • Я использую параметр User для доступа ко всем моим сервисным функциям, и каждая служебная функция выполняет проверку роли перед выполнением. Отражение помогает мне понять, какую функцию я вызываю, и какую роль она имеет (через пользовательские атрибуты).
  • Я также запускаю инициализатор при запуске приложения, и он проверяет все функции (и их атрибуты) и видит, добавил ли я новую требуемую роль. Если есть роль, которую я только что добавил и не кажется на db, она создает ее на db.

Но, увы, это просто доступное для .NET, насколько я знаю, Java не имеет настраиваемых атрибутов, поэтому пока не может быть доступен для Java.

Я хотел бы привести примеры кода, но я слишком ленив, чтобы сделать это. Тем не менее, если у вас есть вопросы о моем способе rbac; вы можете спросить здесь, и я обязательно отвечу.

Ответ 6

Требование ролей работает с Restful Authentication очень хорошо, чтобы обеспечить функции auth на основе ролей и хорошо поддерживается.

Ответ 7

Для приложений .net вы должны смотреть на что-то вроде Visual Guard http://www.visual-guard.com/, чтобы избежать необходимости обрабатывать разрешения и роли с нуля.

Кроме того, для .net у вас есть поставщики членства и роли, а авторизация - с настройкой. http://www.odetocode.com/Articles/427.aspx

Ответ 9

Введение в RBAC -

Система контроля доступа на основе ролей - это метод ограничения доступа к "некоторым источникам или приложениям или некоторым функциям приложений" на основе ролей пользователей организации.

Здесь ограничения могут быть с помощью нескольких разрешений, которые создаются администратором для ограничения доступа, и эти разрешения совместно представляют роль, которая будет назначена пользователю.

И если мы пойдем немного глубже в RBAC, он в основном содержит 3 функции.

1) Аутентификация - подтверждает личность пользователя. Обычно это делается через учетные записи пользователей и пароли или учетные данные.

2) Авторизация - определяет, что пользователь может делать и чего не может делать в приложении. Ex. "Изменение заказа разрешено, но" создание нового заказа не допускается.

3) Аудит действий пользователя над приложениями. - Он отслеживает действия пользователей над приложениями, а также кто и кому предоставил доступ?

Это было очень простой вид сверху системы RBAC.

Базовая структура системы RBAC может содержать следующие компоненты: пользователи, роли, разрешения или ограничения, ресурсы.

  • Разрешения или ограничения - разрешения представляют собой доступ к ресурсу приложений.
  • Роль - содержит коллекцию разрешений
  • Пользователь - одна или несколько ролей, назначенных пользователю, поэтому в конечном итоге пользователь содержит разрешения с помощью роли.

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

Ответ 10

Попробуйте https://github.com/ThoughtWorksStudios/piece, это механизм правил для управления доступом на основе роли пользователя:

  • Определить правила контроля доступа
  • Объединить правила для создания новых правил

Здесь вы можете найти полный пример приложения Rails: https://github.com/xli/piece-blog