Я пытался разработать внутренний портал персонала для нашей компании. Существуют отделы, должности, рабочие области, роли (пользователь, редактор, администратор, суперадминистратор и т. д.) и специальные группы (руководители и т. д.) для группировки пользователей.
Пользователь должен иметь один (только один) отдел. Пользователь должен иметь одну (только одну) оценку работы. Пользователь должен работать как минимум в одной области. Пользователь должен иметь одну (только одну) роль. Пользователь может иметь одну или несколько специальных групп.
Должностные разряды и роли являются иерархическими (оценка или роль могут быть унаследованы от другого), а другие нет.
Пользователи будут видеть только разрешенные меню и получать доступ к разрешенным маршрутам.
Пользователь также будет выбирать, какие пользователи могут просматривать его при публикации нового контента. например: Комбинация 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.
Спасибо.