2015-12-08 6 views
1

модели (таблицы):RBAC: контроль доступа с помощью нескольких атрибутов

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

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

Ситуация 1.

Role1 должны иметь доступ к элементам с категориями с идентификаторами 1 и 3, но роль2 на товары с категориями с идентификаторами 2 и 4.

Ситуация 2.

роль должна имеют доступ к элементам: с категорией 1, но только те, которые имеют статус 5 или 6 с категорией 2, но только те, которые имеют статус 7 или 8

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

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

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

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

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

+0

Напишите пользовательские правила для ваших разрешений. – ineersa

+0

@ineersa да, но что я должен делать в пользовательском правиле? – niluzok

ответ

0

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

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

  • Apache Shiro
  • WSO2 IS
  • Аксиоматика Policy Server

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

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

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

+0

Привет, Дэвид, это означает, что я могу принять Apache Shiro в качестве решения ABAC? Благодарю. – Wuaner