RBAC: управление доступом по нескольким атрибутам

Модели (таблицы):

  • Товар (id, имя, category_id, status_id)
  • Категория (идентификатор, имя)
  • Статус(идентификатор, имя)

Мне нужно ограничить доступ к элементам по точной категории и точному статусу.

Ситуация 1.

Роль 1 должна иметь доступ к элементам категорий с идентификаторами 1 и 3, а роль 2 — к элементам категорий с идентификаторами 2 и 4.

Ситуация 2.

Роль должна иметь доступ к Предметам: с Категорией 1, но только со Статусом 5 или 6 с Категорией 2, но только со Статусом 7 или 8

Категории и статусы можно создавать и удалять.

Как реализовать такой контроль доступа в концепции RBAC?

Для ситуации 1 моя идея состояла в том, чтобы динамически создавать разрешения с такими именами, как «accessItemWithCategory_{$categoryId}», и назначать их соответствующей роли, а затем проверять пользователя, может ли он («accessItemWithCategory_{$categoryId}»). это работает, но просто не чувствует себя хорошо.

Для ситуации 2, если продолжить такой подход, я получаю разрешения типа «accessItemWithCategory_{$categoryId}_Status_{$statusId}», и это просто уродливо и крайне негибко.

Если не использовать идентификаторы в именах разрешений, то что? я могу использовать простое разрешение «accessItem» с правилом, которое проверяет дополнительную таблицу с параметрами роли и элемента, которые позволят роли получить доступ к элементу? Но это означает перенос контроля авторизации за пределы RBAC и ад с поддержкой иерархии ролей.


person niluzok    schedule 08.12.2015    source источник
comment
Напишите собственные правила для ваших разрешений.   -  person ineersa    schedule 08.12.2015
comment
@ineersa да, но что мне делать в пользовательском правиле?   -  person niluzok    schedule 08.12.2015


Ответы (1)


Когда вам нужно использовать дополнительные атрибуты в дополнение к ролям в RBAC, вам нужно изучить управление доступом на основе атрибутов (ABAC).

Несколько фреймворков и решений реализуют ABAC, например.

  • Апачи Широ
  • WSO2 ИС
  • Сервер политики аксиоматики

Обычно ABAC реализуется поверх стандарта XACML (расширяемый язык разметки управления доступом). XACML предоставляет вам язык правил, на котором вы можете выражать правила, например.

«Пользователь, принадлежащий к категории, может просматривать элементы в этой категории».

ABAC более динамичен и проще в управлении и аудите, чем RBAC.

person David Brossard    schedule 09.12.2015
comment
Привет, Дэвид, значит ли это, что я могу использовать Apache Shiro в качестве решения ABAC? Благодарю. - person Wuaner; 25.05.2016