Расширенный таргетинг, такой как Facebook Sharings (Flexible ACL) Дизайн БД

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

Пользователь должен иметь один (только один) отдел. Пользователь должен иметь одну (только одну) оценку работы. Пользователь должен работать как минимум в одной области. Пользователь должен иметь одну (только одну) роль. Пользователь может иметь одну или несколько специальных групп.

Должностные разряды и роли являются иерархическими (оценка или роль могут быть унаследованы от другого), а другие нет.

Пользователи будут видеть только разрешенные меню и получать доступ к разрешенным маршрутам.

Пользователь также будет выбирать, какие пользователи могут просматривать его при публикации нового контента. например: Комбинация 1: (ИТ или финансовый отдел) и (должность — одна из 9, 10, 11) и (область — одна из 1, 5, 8) и (исключительная специальная группа — одна из 1, 5, 8) кроме user id=1 Комбинация 2: (отдел кадров) и (должность 11) и user_id=3,4,5

Комбинации могут быть связаны как И/ИЛИ между собой, как Комбинация 1 И комбинация 2

Таким образом, контента будет много, и каждый контент будет иметь разные групповые разрешения. Я пытаюсь создать схему БД, но очень сложно получить все содержимое, которое видно вошедшему в систему пользователю. Сериализованные данные были бы хороши для сохранения наборов комбинаций в БД, но с сериализованными данными это кажется невозможным. Есть ли преимущество в использовании MongoDB для решения этой проблемы? Как я могу сохранить комбинации разрешений группы/пользователя в таблицах?

Я исследовал множество примеров ACL и RBAC, но не нашел оптимального решения. Пожалуйста помоги.

Кстати, я использую Laravel Framework.

Спасибо.


person Koray Küpe    schedule 14.10.2015    source источник


Ответы (1)


Вам нужно изучить управление доступом на основе атрибутов (ABAC — Википедия) и расширенный доступ Язык разметки управления (XACML). NIST, Национальный институт науки и технологий, дает отличное введение в ABAC здесь.

XACML даст вам возможность выражать подробные политики управления доступом, которые используют ваши атрибуты. В вашем вопросе у вас есть:

  • user attributes
    • department
    • класс работы
    • рабочая область
    • роль
    • группа
  • object (resource) attributes
    • content type
    • местоположение контента
    • классификация контента

С помощью XACML вы можете писать такие правила, как:

Пользователь с классом == 1 может выполнить действие == изменить контент типа == опубликовать, если content.department==user.department.

У вас может быть сколько угодно правил, включая конфликтующие правила или правила среды (запретить доступ до 9 утра).

Взгляните на подключаемый модуль ALFA для Eclipse, чтобы написать свои собственные политики (Википедия | Загрузить).

ХТХ, Дэвид

person David Brossard    schedule 16.10.2015
comment
Большое спасибо. К сожалению, нет никакой реализации PHP и MySQL для ABAC. Итак, я не могу представить, как создавать схемы БД и писать запросы. :/ - person Koray Küpe; 16.10.2015
comment
Взгляните на PHP Slim и MySQL FGAC. - person David Brossard; 17.10.2015