2015-10-14 2 views
0

Я пытался создать внутренний портал персонала для нашей компании. Существуют отделы, классы работы, рабочие области, роли (пользователь, редактор, администратор, супер-админ и т. Д.) И специальные группы (руководители и т. Д.) Для группировки пользователей.Расширенный таргетинг, как Facebook Sharing (Flexible ACL) DB Design

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

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

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

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

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

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

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

Btw, я использую Laravel Framework.

Спасибо.

+0

Возможный дубликат [Complex Правша системы: ACL, RBAC и многое другое, что] (http://stackoverflow.com/questions/13580702/complex-righty-system-acl-rbac- and-more-what) –

ответ

1

Вам необходимо изучить систему управления доступом на основе атрибутов (ABAC - Wikipedia) и расширяемый язык разметки контроля доступа (XACML). NIST, National Institute of Science & Технология дает прекрасное представление о здесь ABAC.

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

  • атрибуты пользователя
    • отдел
    • оценка работы
    • рабочая зона
    • роль
    • группа
  • объект (ресурс) атрибуты
    • тип контента
    • место содержания
    • классификации содержимого

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

Пользователь с класса == 1 может сделать action == изменить содержимое типа == post , если content.department == user.department.

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

Посмотрите на плагин ALFA для Eclipse, чтобы написать свои собственные политики (Wikipedia | Download).

НТН, Дэвид

+0

Большое спасибо. Несомненно, никакой PHP и MySQL реализация ABAC. Итак, я не могу себе представить, как создавать схемы БД и писать запросы. :/ –

+0

Посмотрите на PHP Slim и MySQL FGAC –

 Смежные вопросы

  • Нет связанных вопросов^_^