powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Система разграничения прав
8 сообщений из 8, страница 1 из 1
Система разграничения прав
    #38324124
Stand-Up
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, подскажите можно ли упростить механизм проверки прав. Есть следующая структура данных(таблицы):
users (user_id, name);
role (role_id, name);
user_role (user_id, role_id);
role_actions (role_id, action_id);
actions(action_id, name);

Столкнулся со следующей проблемой, для того, чтобы проверить может ли пользователь совершить то или иное действие, необходимо или нагородить кучу if-ов или делать case, в том или ином случае приходится делать очень много проверок, и система плохо масштабируется. Пока пришел к выводу, что необходимо делать ещё одну сущность, которая будет связывать actions с объектами и проверять есть ли у пользователя такой action . Подскажите может стоит сделать как-то по другому?
...
Рейтинг: 0 / 0
Система разграничения прав
    #38324974
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stand-Up,

Не пробовали уровни доступа хранить в виде битовых масок?
Т.е. например.
00000000b - ничего нельзя
00000001b -можно что-то "1"
00000010b -можно что-то "2"
00000100b -можно что-то "3"
и т.д. (8 наименований)

У пользователя права будут выглядеть
00000101b -т.е. можно "1" и "3"

Проверка что можно "3": 00000101b & 0000100b == 0000100b (& - битовое "И") будет истинно
Проверка что можно "2": 00000101b & 0000100b == 0000010b (& - битовое "И") будет ложно

Тогда не надо "городить кучу if-ов", а обойтись несколькими ;-)
...
Рейтинг: 0 / 0
Система разграничения прав
    #38325040
Stand-Up
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mad_nazgulStand-Up,

Не пробовали уровни доступа хранить в виде битовых масок?
Т.е. например.
00000000b - ничего нельзя
00000001b -можно что-то "1"
00000010b -можно что-то "2"
00000100b -можно что-то "3"
и т.д. (8 наименований)

Дело в том, что у меня этих наименований около 40, и возможно еще будут добавляться, еще сложность в том, что активности связаны не только с обычными смотреть/редактировать/удалять.
...
Рейтинг: 0 / 0
Система разграничения прав
    #38325092
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по сабжу: Все просто
Всего одна таблица (упрощенно).

Пользователь, тип права(н-р на отчет),ID объекта(н-р код отчета), право (integer)

Набор функций для зачитки прав.
Можно реализовать любую комбинацию прав. Роли не нужны, т.к. их можно заменить копированием прав со специальных "эталонных" пользователей.
Почему я против ролей ? Потому что всегда есть случаи, когда из прав роли следует сделать некоторое исключение для конкретного пользователя. Создание же "прав-исключений-из-правил" - лишний уровень проверок. Кароч одни неудобства. :)
...
Рейтинг: 0 / 0
Система разграничения прав
    #38325167
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV, роли есть в любом поставщике, а права - дополнительный костыль в секурити :)
Лично за роли и права, одно другое дополняет. Роль админ, например. Не нужно опускаться до действий, сразу нативно на лету отстраиваем нужный интерфейс.
...
Рейтинг: 0 / 0
Система разграничения прав
    #38325363
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stand-UpДело в том, что у меня этих наименований около 40, и возможно еще будут добавляться, еще сложность в том, что активности связаны не только с обычными смотреть/редактировать/удалять.

Активности - в виде битовых масок. (до 64 действий вам должно хватить)
А потом на каждый объект "навешиваются права доступа".
Т.е. (объект_ID, роль, права)
Причем "роль" это и роль, и конкретный пользователь ;-)
...
Рейтинг: 0 / 0
Система разграничения прав
    #38325740
Serzh KZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stand-Up,
1) Я бы добавил иерархию ролей, удобней администрировать (к примеру: обычный пользователь над ним опытный и далее супер админ)
2) Табличку object_role - где собственно будут назначены роли объектам
3) Добавил бы, User_object_actions которая заполнялась бы тригером из таблиц user_role , role_actions и object_role , для того, что бы не пересчитывать привилегии при каждом вызове объекта пользователем.

Собственно по User_object_actions строил интерфейс.
...
Рейтинг: 0 / 0
Система разграничения прав
    #38325832
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> у меня этих наименований около 40

Задайте себе вопрос: какие действия можно совершать с данными? Сравните количество этих действий с написанным. Сделайте простой вывод:

> можно ли упростить механизм проверки прав

упрощать здесь нечего. Но можно, слегка усложнив, привести к виду, удобному для использования. Направление рассуждений вы выбрали верное, но уровней абстракции у вас маловато.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Система разграничения прав
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]