powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Покритикуйте плз систему привилегий пользователей
11 сообщений из 11, страница 1 из 1
Покритикуйте плз систему привилегий пользователей
    #37878238
LowCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пишу типа сайт. Такой портал внутрикорпортаивный, но который смотрит наружу и куда ходють клиенты фирмы. Внтури все до скучного обыденно – клиенты, договора, специфика договоров итд. На сайте должны быть пользователи с разными уровнями привилегий. Сейчас на уровне ТЗ определены несколько ролей, но их потом могут, как дополнить, так и изменить. Роли довольно стандартные – Админ, Оператор, Бухгалтер, Обычный пользователь (для внешних клиентов сайта которых обслуживает компания). Админ видит при входе на сайт страницу управления клиентами - тока он может удалять. Оператор видит интерфейс внесения клиентов - только он может добавлять новых но не может удалять. Клиент видит тоже, что и оператор, но данные только на себя и может добавлять свои дочерние компании. Сайт само собой на пхп.
Мысль пока такая. В БД я создаю таблицу привилегий

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
tbl_priv
=====================
id_priv,
name_priv
-- Примеры содержимого таблицы
/*
Видеть всех клиентов
Видеть только себя и дочерних
Изменять клиентов
Добавлять клиентов
…
*/



Потом таблицу сопоставления пользователей и ролей (таблицы ролей и пользователей не привожу за их очевидностью). Здесь под пользователи разумеется пользователи сайта не имеющие отношения к пользователям БД. В данной парадигме пользователи БД называются ролями так как им можно разрешить/запретить доступ на уровне объектов БД

Код: plsql
1.
2.
3.
4.
5.
tbl_user_role
=====================
id_user_role,
id_role, (  роль – в точности имя пользователя определенного на уровне БД )
id_user



Потом таблицу сопоставления привилегий и ролей
Код: plsql
1.
2.
3.
4.
5.
tbl_role_priv
=====================
id_role_priv,
id_role, (  роль – в точности имя пользователя определенного на уровне БД – из отельной таблицы)
id_priv



На уровне самой БД определяем пользователей БД – это будут роли пользователей сайта. Для примера пользователь БД usr_customer, ему не даем вообще никаких грантов - тока запуск хранимики которая ему дает его данные и его дочерних предприятий. Также привилегии на запуск хранимки с возможностью внесения изменения клиентов только по своему id. И все.
Теперь со стороны сайта.

Юзверь при авторизации отправляет свои логин и пароль на сервер. Скрипт пхп считывает из БД самого пользователя, его роль и массив его привилегий $user_conf . Также он считывает конфигурационный скрипт в котором содержатся по каждый роли – стартовая страница (view) после авторизации и array пунктов меню соответствующие данной роли.
Далее внутри стартовой страницы придется проверять условия
Код: php
1.
2.
3.
4.
5.
6.
If( ‘имя привелегии’ == inarray($user_conf[‘PRIVILEGES’]) 
	Do_this();
If( ‘имя привелегии2’ == inarray($user_conf[‘PRIVILEGES’])
	Do_that();

…..




Для примера предположим у нас есть один html (в моем случае Smarty но это не суть) шаблон и для клиента и для оператора. Но только оператору мы показываем всех клиентов а клиенту только его самого и его дочерних. Это что бы не городить кучу вьюшек-шаблонов.

В теле PHP скрипта, который инициализирует данные для показа в html (для передачи в Smarty) мы смотрим какие есть привилегии и отображаем только соответствующие данные. Вот и все.
Недостатком такого подхода можно считать, что если я добавляю новую привилегию, то я должен пройтись по всем скриптам где оно есть и внести соответствующий if. Можно было бы сделать таблицу/таблицы в БД в котором бы ставить в соответствие имя привилегии и вьюшка но такая система мало что дает а вот громоздкости всего решения прибавляет. Пока вроде ничего другого придумать не могу лучше.

Нельзя также ошибиться в имени привелегии и нельзя потом менять имя в БД). Если вместо имени использовать айдишники то тоже плохо - новые айдишнкии скажем в новой БД и все .. приехали :(. Выходм может быть создание единого справочника со стандартными айди которые никогда не меняются.

Посоветуйте – либо другую систему привилегий либо дайте плиз свои комменты добаления улучшения – какие могу быть слабые места о которых я не подумал … Вообщем все что может прийти в голову. Заранее признателен.
...
Рейтинг: 0 / 0
Покритикуйте плз систему привилегий пользователей
    #37879140
а зачем наворачивать систему
-пользователь -роль -привилегии

разве нельзя обойтись
-пользователь -рол(и)
...
Рейтинг: 0 / 0
Покритикуйте плз систему привилегий пользователей
    #37880648
LowCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ведь и вправду .. похоже табилица привилегий не нужна. Достаточно настроить роль на доступ только к определенным объектам а в коде пхп просто вместо имени привилегии ставить имя пользователя БД ... да так и сделаем.
...
Рейтинг: 0 / 0
Покритикуйте плз систему привилегий пользователей
    #37881104
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нуну.
когда вам понадобится выдать пользователю одно право из другой группы не давая остальных вы что делать будете?
...
Рейтинг: 0 / 0
Покритикуйте плз систему привилегий пользователей
    #37881247
авторкогда вам понадобится выдать пользователю одно право из другой группы не давая остальных вы что делать будете?
относись к роли пользователя, как к привилегии, а не как к группе привилегий, и будет тебе счастье! ;)
если количество ролей в приложении станет превышать критическую массу, то переименуй их в привилегии и объедини в группы...
...
Рейтинг: 0 / 0
Покритикуйте плз систему привилегий пользователей
    #37881525
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пишу типа сайт,

Не понятно, зачем решать одну и ту же задачу дважды, когда можно решить один раз.
...
Рейтинг: 0 / 0
Покритикуйте плз систему привилегий пользователей
    #37881588
авторНе понятно, зачем решать одну и ту же задачу дважды, когда можно решить один раз.
наверное ты прав!
просто тогда, нужно на каждое действие (авторизованого) пользователя, в коде, прописать своё! правило.
каждому пользователю выдавать разрешение на то или иное действие (правило), а группы будут служить только как массив опр. правил, что бы одному пользователю выдать сразу набор! этих самых правил.
Код: php
1.
2.
3.
if(order_action('one')){};
if(order_action('two')){};
if(order_action('three')){};


ИМХО система настолько тяжела, что никаждая CMS\FW включают такой функционал по умолчанию. именно по этому, я предложил не заморачиваться на -пользователь -роль -привилегии а использовать -пользователь -рол(и) , где группа действий пользователя уже определена в коде как некий набор действий
Код: php
1.
2.
3.
4.
if(role('admin')){action('one')};
if(role('admin')){action('two')};
if(name('vkle')){action('three')};
if(role('admin') && name('vkle')){and etc.};
...
Рейтинг: 0 / 0
Покритикуйте плз систему привилегий пользователей
    #37881643
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пишу типа сайтгруппы будут служить только как массив опр. правилАга. Такая группа и есть роль.

пишу типа сайтИМХО система настолько тяжелаУгу, одновременно гибко, масштабируемо и легко вряд ли получится. У нас в некой софтине для управления проектами юзается phpGACL. Заглянул сейчас в БД - там 27 таблиц с ее префиксом.
...
Рейтинг: 0 / 0
Покритикуйте плз систему привилегий пользователей
    #37881676
авторУгу, одновременно гибко, масштабируемо
согласен ;)

тогда ТС-у ничего другого не остаётся, как сесть спокойно и описать возможные действия авторизованных пользователей его портала.
- добавить пользователя
- удалить пользователя
- просмотреть пользователя
- и тд
раскидать правила по коду + занести эти правила в БД и выдавать пользователям именно их

- пользователь1
-- добавить пользователя
-- удалить пользователя
-- просмотреть пользователя

- пользователь2
-- просмотреть пользователя

ИМХО группы (роли) в его проекте нужны будут только, если этих правил будет ОЧЕНЬ много! ;) и назначение отдельных правил станет слишком тяжёлой задачей + проверка ролей по коду будет как бэ и не нужна тк они (группы) будут носить прикладной характер.
авторНельзя также ошибиться в имени привелегии и нельзя потом менять имя в БД). Если вместо имени использовать айдишники то тоже плохо - новые айдишнкии скажем в новой БД и все .. приехали :(. Выходм может быть создание единого справочника со стандартными айди которые никогда не меняются.
++ БД (таблица привелегий) должна быть неразрывной частью проекта!!!
...
Рейтинг: 0 / 0
Покритикуйте плз систему привилегий пользователей
    #37883794
Делал несколько похожих по идеологии систем.
Советаю почитать и прислушаться .....
http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/
Смысл сводится к следующему.
Все проверки соотношения ролей и доступности действий для этих ролей
нужно делать в одном месте, в идеале это должен быть отдельный модуль или класс.
Непосредственно в рабочем коде использовать этот модуль\класс для проверки доступности действия
и стараться избегать (в рабочем коде) конструкций типа
Код: ruby
1.
if user.has_role?('operator') then ....


правильнее писать
Код: ruby
1.
 if Auth.can?(user,'edit','products') then .... 


В данном случае Auth это модуль\класс для провекри прав, 'products' это "обьект нуждающийся в защите",
'edit' это легальное действия по отношения к обьекту пользователем user.
Если в проекте используется ORM, то это упростит работу, так как в качестве обьекта защиты можно
использовать непосредственно экземпляр ORM класса.

Распределение прав по ролям можно написать прямо в этом модуле\классе, а если их становится много
или требуется интерактивное редактирование, то можно вынести в БД.
При этом, добавление новых ролей или изменени прав каким-то ролям не потребует рефакторинга рабочего кода,
а вся логика проверок будет в одном месте.
...
Рейтинг: 0 / 0
Покритикуйте плз систему привилегий пользователей
    #37883951
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пользователь 'селком не тянем' это я
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Покритикуйте плз систему привилегий пользователей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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