Как организовать хранение списков приватностей к объектам?

Есть следующие таблицы:
Пользователи: user - id, ....
Проекты: project - id, ...

В проекте есть несколько объектов, один из них folder.
Папки: project_folder - id, project_id, ...

Lnk табличка связывающая юзера с проектом:
project_user - [project_id, user_id], ...

В Web консоле администратор добавляет пользователя в проект и предоставляет доступ к папкам одним их следующих способов: "Доступ ко всем папкам", "Доступ ко всем кроме", "Доступ только к".
Соответственно при выборе одного из 2х последних пунктов, добавляется окно для выбора папок. Таким образом мы имеем тип доступа и список папок.

На данный момент созрело только одно решение:
Добавить в таблицу project_user поле folder_access_type(int) - 0,1,2
И создать таблицу project_user_folder - [project_id, user_id, folder_id] в которой собственно и хранить список папок.

Соответственно списком доступных пользователю папок, при folder_access_type = 1 будут все папки проекта минус папки из таблицы project_user_folder, а если folder_access_type = 2 то просто все папки из таблицы project_user_folder.

Решение не кажется очень лаконичным, по этому решил задать вопрос здесь, как лучше организовать структуру таблиц при данном подходе к разграничению доступа?
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы