RBAC: контроль доступа по нескольким атрибутам
Модели (таблицы):
- Item (id, name, category_id, status_id)
- Категория (идентификатор, имя)
- Статус (идентификатор, имя)
Мне нужно ограничить доступ к пунктам с точной категорией и точным статусом.
Ситуация 1.
Role1 должен иметь доступ к Предметам с категориями с идентификаторами 1 и 3, но Role2 должен иметь доступ к Предметам с категориями с идентификаторами 2 и 4.
Ситуация 2.
Роль должна иметь доступ к элементам: с категорией 1, но только те, которые имеют статус 5 или 6 с категорией 2, но только те, которые имеют статус 7 или 8
Категории и статусы могут быть созданы и удалены.
Как реализовать такой контроль доступа в концепции RBAC?
Для ситуации 1 моя идея заключалась в том, чтобы динамически создавать разрешения с такими именами, как "accessItemWithCategory_{$categoryId}", и назначать их соответствующей роли, а затем проверять пользователя, может ли он ("accessItemWithCategory_{$categoryId}"). это работает, но просто не чувствует себя хорошо.
Для ситуации 2, если продолжить такой подход, я получаю разрешения, такие как "accessItemWithCategory_{$categoryId}_Status_{$statusId}", и это просто безобразно и крайне негибко.
Если не использовать идентификаторы в именах разрешений, чем что? я могу использовать простое разрешение "accessItem" с правилом, которое проверяет дополнительную таблицу с ролью и параметрами элемента, которые позволят роли получить доступ к элементу? Но это означает перемещение контроля авторизации за пределы RBAC и ад с поддержкой иерархии ролей.
1 ответ
Когда вам нужно использовать дополнительные атрибуты в дополнение к ролям в RBAC, вам нужно изучить управление доступом на основе атрибутов (ABAC).
Несколько структур и решений реализуют ABAC, например
- Апач Широ
- WSO2 IS
- Axiomatics Policy Server
Обычно ABAC реализуется поверх стандарта, называемого XACML (язык разметки расширяемого контроля доступа). XACML предоставляет вам язык правил, на котором вы можете выражать правила, например
Msgstr "Пользователь, который принадлежит категории, может просматривать элементы в этой категории".
ABAC более динамичен и проще в управлении и аудите, чем RBAC.