Реализация прав доступа к данным (с областями видимости) и новая область (удаленные)

TssDragon

Новичок
Здравствуйте, Господа, есть очередной вопрос, требуется помощь :)

Необходимо реализовать права доступа к данным для групп пользователей, при этом, у данных есть области видимости.
Пояснение:
Есть множество объектов (карточки объектов (компании, люди, счета и так далее) - в базе это разные таблицы (ну, логично же, да? :) ) ), у каждого объекта есть поле "scope" - область видимости. Далее, есть таблица с областями - древовидная структура. Есть таблица с группами пользователей. Есть таблица соотношения групп и областей (в каждой группе может быть n-ое количество областей и они могут пересекаться). Есть таблица соотношения пользователей и групп (у одного пользователя может быть несколько групп).
В таком виде все работает.
Возникла необходимость прикрутить права доступа (чтение / запись) к данным на группы. При этом, если пользователь в нескольких группах и конкретная область видимости пересекается, то необходимо брать максимальные права из этих групп. И необходимо реализовать возможность пометить данные как удаленные, но физически их не удалять, а оставить доступ к ним только для определенной группы пользователей.
Мои мысли:
а) По удаленным:
Добавить новую область, которая для всех групп, кроме, например, admin, будет запрещена даже к просмотру (то есть, третье право доступа, назовем его deny) и перемещать "удаленные" данные в эту область.
б) По правам:
Просто добавить в таблицу соотношения групп и областей еще один столбец с правами, но возникает вопрос: как в таком случае выводить данные ? Получается, мне надо делать два вида верстки для каждого права? (при просмотре просто вывод, например, как значения ячеек таблицы, а при возможности редактирования вывод как input элементы формы)

Также, возникают вопросы/проблемки, по взаимодействию удаленных данных и прав доступа, пример:
При переносе какой-либо области данных в "удаленную" область, права на просмотр ее группе пользователей, к которой она привязана сохраняются, не могу придумать, как реализовать получение "родительских" прав deny для этой перемещенной области с сохранением прежних прав групп, для последующей возможности восстановления... Да, криво пояснил, не владею слогом красивым, прошу простить :)

Вот, прошу помощи с вопросами и,если есть лучшие варианты, корректировки моих мыслей
 

WMix

герр M:)ller
Партнер клуба
При этом, если пользователь в нескольких группах и конкретная область видимости пересекается, то необходимо брать максимальные права из этих групп.
нужно написать функцию которая сравнивает "права из этих групп" и выбирает максимум
 

Тугай

Новичок
Пользователь/группа пользователей могут выполнять определенные Роли (аналог scope).
Роль определяет какие операции можно выполнять над объектом или что тоже Роль определяет Права.

"добавить в таблицу соотношения групп и областей еще один столбец с правами" - нет нужна еще одна таблица, которая свяжет области(роли) с правами.

Дальше просто по пользователю находятся его роли, по ролям определяется, если право на ту или иную операцию с объектом.

"брать максимальные права" - это что-то трудно определяемое :)

Если смотреть не от пользователя, а от объекта, то
a) объекты входят в разные области;
б) каждая область задает права над объектами;
с) пользователи работают в своих областях;
 
Последнее редактирование:

TssDragon

Новичок
Если смотреть не от пользователя, а от объекта, то
a) объекты входят в разные области;
б) каждая область задает права над объектами;
с) пользователи работают в своих областях;
у меня не совсем так :)
а) объекты входят в разные области видимости
б) каждая область входит в одну/несколько групп
в) группа задает права над областями
г) пользователи входят в группы и от этого определяется с какими областями данных они могут работать и какие права у них есть

задание прав через группу необходимо для того, чтобы с одним и тем же скопом данных могли работать разные люди, но, при этом, кто-то мог редактировать, а кто-то нет
также, одна группа может содержать множество областей и для каждой области будут свои права

"брать максимальные права" - это что-то трудно определяемое :)
допустим, пользователь находится в group1 и group2
обе группы содержат в себе scope1
для group1 права на область scope1 - read
для group2 - write
имелось в виду, что в таком случае надо разрешить пользователю write при работе с данными :)
 
Сверху