|
|
|
Покритикуйте плз систему привилегий пользователей
|
|||
|---|---|---|---|
|
#18+
Вот пишу типа сайт. Такой портал внутрикорпортаивный, но который смотрит наружу и куда ходють клиенты фирмы. Внтури все до скучного обыденно – клиенты, договора, специфика договоров итд. На сайте должны быть пользователи с разными уровнями привилегий. Сейчас на уровне ТЗ определены несколько ролей, но их потом могут, как дополнить, так и изменить. Роли довольно стандартные – Админ, Оператор, Бухгалтер, Обычный пользователь (для внешних клиентов сайта которых обслуживает компания). Админ видит при входе на сайт страницу управления клиентами - тока он может удалять. Оператор видит интерфейс внесения клиентов - только он может добавлять новых но не может удалять. Клиент видит тоже, что и оператор, но данные только на себя и может добавлять свои дочерние компании. Сайт само собой на пхп. Мысль пока такая. В БД я создаю таблицу привилегий Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Потом таблицу сопоставления пользователей и ролей (таблицы ролей и пользователей не привожу за их очевидностью). Здесь под пользователи разумеется пользователи сайта не имеющие отношения к пользователям БД. В данной парадигме пользователи БД называются ролями так как им можно разрешить/запретить доступ на уровне объектов БД Код: plsql 1. 2. 3. 4. 5. Потом таблицу сопоставления привилегий и ролей Код: plsql 1. 2. 3. 4. 5. На уровне самой БД определяем пользователей БД – это будут роли пользователей сайта. Для примера пользователь БД usr_customer, ему не даем вообще никаких грантов - тока запуск хранимики которая ему дает его данные и его дочерних предприятий. Также привилегии на запуск хранимки с возможностью внесения изменения клиентов только по своему id. И все. Теперь со стороны сайта. Юзверь при авторизации отправляет свои логин и пароль на сервер. Скрипт пхп считывает из БД самого пользователя, его роль и массив его привилегий $user_conf . Также он считывает конфигурационный скрипт в котором содержатся по каждый роли – стартовая страница (view) после авторизации и array пунктов меню соответствующие данной роли. Далее внутри стартовой страницы придется проверять условия Код: php 1. 2. 3. 4. 5. 6. Для примера предположим у нас есть один html (в моем случае Smarty но это не суть) шаблон и для клиента и для оператора. Но только оператору мы показываем всех клиентов а клиенту только его самого и его дочерних. Это что бы не городить кучу вьюшек-шаблонов. В теле PHP скрипта, который инициализирует данные для показа в html (для передачи в Smarty) мы смотрим какие есть привилегии и отображаем только соответствующие данные. Вот и все. Недостатком такого подхода можно считать, что если я добавляю новую привилегию, то я должен пройтись по всем скриптам где оно есть и внести соответствующий if. Можно было бы сделать таблицу/таблицы в БД в котором бы ставить в соответствие имя привилегии и вьюшка но такая система мало что дает а вот громоздкости всего решения прибавляет. Пока вроде ничего другого придумать не могу лучше. Нельзя также ошибиться в имени привелегии и нельзя потом менять имя в БД). Если вместо имени использовать айдишники то тоже плохо - новые айдишнкии скажем в новой БД и все .. приехали :(. Выходм может быть создание единого справочника со стандартными айди которые никогда не меняются. Посоветуйте – либо другую систему привилегий либо дайте плиз свои комменты добаления улучшения – какие могу быть слабые места о которых я не подумал … Вообщем все что может прийти в голову. Заранее признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2012, 14:19:22 |
|
||
|
Покритикуйте плз систему привилегий пользователей
|
|||
|---|---|---|---|
|
#18+
а зачем наворачивать систему -пользователь -роль -привилегии разве нельзя обойтись -пользователь -рол(и) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2012, 09:51:18 |
|
||
|
Покритикуйте плз систему привилегий пользователей
|
|||
|---|---|---|---|
|
#18+
А ведь и вправду .. похоже табилица привилегий не нужна. Достаточно настроить роль на доступ только к определенным объектам а в коде пхп просто вместо имени привилегии ставить имя пользователя БД ... да так и сделаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2012, 14:42:05 |
|
||
|
Покритикуйте плз систему привилегий пользователей
|
|||
|---|---|---|---|
|
#18+
нуну. когда вам понадобится выдать пользователю одно право из другой группы не давая остальных вы что делать будете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2012, 18:13:46 |
|
||
|
Покритикуйте плз систему привилегий пользователей
|
|||
|---|---|---|---|
|
#18+
авторкогда вам понадобится выдать пользователю одно право из другой группы не давая остальных вы что делать будете? относись к роли пользователя, как к привилегии, а не как к группе привилегий, и будет тебе счастье! ;) если количество ролей в приложении станет превышать критическую массу, то переименуй их в привилегии и объедини в группы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2012, 19:34:38 |
|
||
|
Покритикуйте плз систему привилегий пользователей
|
|||
|---|---|---|---|
|
#18+
пишу типа сайт, Не понятно, зачем решать одну и ту же задачу дважды, когда можно решить один раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2012, 01:39:40 |
|
||
|
Покритикуйте плз систему привилегий пользователей
|
|||
|---|---|---|---|
|
#18+
авторНе понятно, зачем решать одну и ту же задачу дважды, когда можно решить один раз. наверное ты прав! просто тогда, нужно на каждое действие (авторизованого) пользователя, в коде, прописать своё! правило. каждому пользователю выдавать разрешение на то или иное действие (правило), а группы будут служить только как массив опр. правил, что бы одному пользователю выдать сразу набор! этих самых правил. Код: php 1. 2. 3. ИМХО система настолько тяжела, что никаждая CMS\FW включают такой функционал по умолчанию. именно по этому, я предложил не заморачиваться на -пользователь -роль -привилегии а использовать -пользователь -рол(и) , где группа действий пользователя уже определена в коде как некий набор действий Код: php 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2012, 07:57:04 |
|
||
|
Покритикуйте плз систему привилегий пользователей
|
|||
|---|---|---|---|
|
#18+
пишу типа сайтгруппы будут служить только как массив опр. правилАга. Такая группа и есть роль. пишу типа сайтИМХО система настолько тяжелаУгу, одновременно гибко, масштабируемо и легко вряд ли получится. У нас в некой софтине для управления проектами юзается phpGACL. Заглянул сейчас в БД - там 27 таблиц с ее префиксом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2012, 09:10:35 |
|
||
|
Покритикуйте плз систему привилегий пользователей
|
|||
|---|---|---|---|
|
#18+
авторУгу, одновременно гибко, масштабируемо согласен ;) тогда ТС-у ничего другого не остаётся, как сесть спокойно и описать возможные действия авторизованных пользователей его портала. - добавить пользователя - удалить пользователя - просмотреть пользователя - и тд раскидать правила по коду + занести эти правила в БД и выдавать пользователям именно их - пользователь1 -- добавить пользователя -- удалить пользователя -- просмотреть пользователя - пользователь2 -- просмотреть пользователя ИМХО группы (роли) в его проекте нужны будут только, если этих правил будет ОЧЕНЬ много! ;) и назначение отдельных правил станет слишком тяжёлой задачей + проверка ролей по коду будет как бэ и не нужна тк они (группы) будут носить прикладной характер. авторНельзя также ошибиться в имени привелегии и нельзя потом менять имя в БД). Если вместо имени использовать айдишники то тоже плохо - новые айдишнкии скажем в новой БД и все .. приехали :(. Выходм может быть создание единого справочника со стандартными айди которые никогда не меняются. ++ БД (таблица привелегий) должна быть неразрывной частью проекта!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2012, 09:34:19 |
|
||
|
Покритикуйте плз систему привилегий пользователей
|
|||
|---|---|---|---|
|
#18+
Делал несколько похожих по идеологии систем. Советаю почитать и прислушаться ..... http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/ Смысл сводится к следующему. Все проверки соотношения ролей и доступности действий для этих ролей нужно делать в одном месте, в идеале это должен быть отдельный модуль или класс. Непосредственно в рабочем коде использовать этот модуль\класс для проверки доступности действия и стараться избегать (в рабочем коде) конструкций типа Код: ruby 1. правильнее писать Код: ruby 1. В данном случае Auth это модуль\класс для провекри прав, 'products' это "обьект нуждающийся в защите", 'edit' это легальное действия по отношения к обьекту пользователем user. Если в проекте используется ORM, то это упростит работу, так как в качестве обьекта защиты можно использовать непосредственно экземпляр ORM класса. Распределение прав по ролям можно написать прямо в этом модуле\классе, а если их становится много или требуется интерактивное редактирование, то можно вынести в БД. При этом, добавление новых ролей или изменени прав каким-то ролям не потребует рефакторинга рабочего кода, а вся логика проверок будет в одном месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2012, 14:32:32 |
|
||
|
|

start [/forum/topic.php?fid=23&fpage=139&tid=1464899]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
91ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 258ms |
| total: | 461ms |

| 0 / 0 |
