Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Система прав 
:(
    Опции темы
Opik
Дата 3.9.2006, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



PM MAIL Skype   Вверх
Wowa
Дата 3.9.2006, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Ох, как много текста smile Они не могли все более кратко сформулировать? smile

Я на деле представляю себе такую систему.

Есть таблица:
ИД группы|ИД пользователя|привелегия
1||create_user
1||edit_user
2||edit_my_profil

Сюда заносятся только разрешенные действия для группы или юзера. Всё, что не разрешено - запрещено.

И есть функция для проверки:
Код

// Проверяем есть-ли права для вызова определенной функции
function have_permission($permission, $action='') {
    $sql = "SELECT * FROM $table_permissions WHERE id='{$_SESSION['idmgroup']}' AND permission='$permission'";
    $have_permission=db_row($sql);
    if ($have_permission['id']) {return 1;} else {
        switch ($action) {
            case 'return':
                        return;
                         break;
            default:
                       $authorization_class->access_denied();
        }
    }

}


Предлагаю так делать.
PM WWW   Вверх
Opik
Дата 3.9.2006, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Wowa
Ты как нить почитай, очень гибкая система. ИМХО
Это стоит прочесть :)
PM MAIL Skype   Вверх
Wowa
Дата 3.9.2006, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Opik, а чем моя не гибкая? smile Ответь, тогда прочту smile
PM WWW   Вверх
Opik
Дата 3.9.2006, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Wowa
Такой системой как ты предложил сложно сделать группы пользователей, а если пользователей в двух группах? трех? Там по ссылке есть хороший пример:

Цитата

В небольших или простых по устройству системах используются простые способы управления привилегиями. Например, в системе дистанционного образования Moodle все пользователи делятся на группы: администраторы, создатели курсов, преподаватели, студенты и гости. В зависимости от того, какой группе принадлежит пользователь, у него есть разные привилегии. 

Но уже даже в этой системе мы можем наблюдать, что не все так просто с этими группами. Например, создатели курсов считаются преподавателями только в пределах тех курсов, которые они сами создали, а при просмотре других курсов они считаются студентами. Мы не можем для каждого конкретного преподавателя указать, может ли он добавлять в свой курс других преподавателей или же это может сделать только создатель курса. Для облегчения поиска нужных курсов эти курсы распределены по категориям (по папками), которые имеют иерархическую организацию. Если мы записываем человека в группу создателей курсов, то он может создавать курс в любой категории - мы не можем ограничить, внутри каких категорий он может создавать новые курсы. Создав новый курс, мы не можем записать на него сразу всю группу студентов, мы должны добавлять студентов по одному, выбирая их из !ВСЕХ! пользователей, зарегистрированных на сайте. Либо мы можем сообщить им кодовое слово, и тогда они сами себя добавят - но где гарантия, что это кодовое слово не станет известно посторонним? Есть также много других ограничений. 

PM MAIL Skype   Вверх
Wowa
Дата 3.9.2006, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Opik, сколько времени уйдет на организацию такой системы разграничения доступа? Действительно ли нам это нужно?
PM WWW   Вверх
Sardar
Дата 3.9.2006, 04:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Opik, все свежие системты управления доступом основываються на ролях и уникальных привилегиях с точностью до одного пользователя. Я разработал(дорабатываю) похожую систему, но есть отличия (с начала):
  • есть права(привилегии), организованные в иерархию (дерево, по имени через ".")
  • есть гранты, т.е. выдача права с возможным лимитом по календарю, списку IP и другим фильтрам. Гранты бывают двух типов: "добавить" и "удалить". Дают или запрещают право.
  • есть пользователи, не важно как авторизуються, но каждый запрос всегда связан с ID текущего пользователя, прямо как в осях какждый процес связан с пользователем.
  • есть роли, роль нужна для обьеденения прав в некое логическе целое
  • пользователи могут иметь множество ролей, он наследует все права выданные на роль. владение ролями не упорядочено, запрещающий грант права всегда имеет приоритет
  • гранты можно выдавать как пользователям, так и группам, личные гранты пользователя имеют приоритет
  • наследование и вычисление эффективных такое же как и по ссылке выше.

Это основа, далее конкретный модуль может проверить:
  • владеет ли пользоваль правом - простейшая проверка boolean PermissionManager::hasPermission("some.privilege");
  • владеет ли пользователь правом и выполняеться ли условие - условие строиться модулем. Модулю предоставляеться ID пользователя, ID права.

Таким образом модуль для работы с юзерами и правами (да, фактически это модуль и его можно убрать физически отключив этот функционал, постовляеться вместе с основой) собирает всех пользователей в группы/контейнерый, при этом группы не имеют иерархии. Один юзер может находиться в нескольких группах, груп может быть сколько угодно. Пользователю можно выдать право на выполнение конкретного действия над пользователями в другой группе. Таким образом можно собрать людей в "топлы" и назначить им одного или более админов с точно разрешёнными действиями над этими юзерами.

Модуль создаёт проверку: конкретное_право + конкретные_группы, где: 
  • конкретное_право - владеет ли текущий пользователй этим правом
  • конкретные_группы - входит ли список редактируемых пользователей в группы, на которых распространяеться право для текущего пользовате (администратор).

Как видм костяк расширяеться новыми связями по задаче. Естественно что такая гибкость означает тяжёлые запросы и возможно массу инфы доставаемой из БД. Естественно что при каждом запросе БД не трогаеться, для этого система контроля доступа плотно связана с кешированием (не удаляемый (только руками) модуль). При логине человек может подождать 1-5 секунд пока его инфа вся разберёться, затем в его персональный кешь/сессию сбрасываеться эта инфа в виде var_dump файлов и SQLite таблиц.

Модули имеют почтовые ящики, куда другие модули могут посылать уведомления. Система контроля правами проверяет при каждом запросе изменились ли права, если надо, перестраивет кеш. Валидность по календарю, ИП и прочему естественно проверяеться из кеша. Отсюда приемлемая скорость работы.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Opik
Дата 3.9.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Wowa
Перефразирую твой вопрос: "Действительно ли нам нужна гибкая система?".
Мое ИМХО - нужна. Sardar  лишь это подтвердил
PM MAIL Skype   Вверх
Wowa
Дата 3.9.2006, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Opik, сколько времени у тебя уйдет на ее реализацию?
PM WWW   Вверх
Opik
Дата 3.9.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: нет
Всего: 55



Wowa
Ну начинать нужно все равно не с нее. Нужно для начала как минимум ядро системы. Я не знаю, что там в репозитариях сейчас. Нужно посмотреть. Ну если сесть, то пару дней наверно. сейчас конкретнее сказать не могу.
PM MAIL Skype   Вверх
Wowa
Дата 1.10.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Кстати, предлагаю сделать возможным подключать базы юзеров сторонних движок для прохождение авторизации. Например так, чтобы пользователи форума Invision могли залогиниться на сайте с Vingrad CMS. (естественно при этом должен быть обеспечен доступ к таблице ibf_users). На мой взгляд это довольно легко реализовать, но польза будет колоссальная.
PM WWW   Вверх
IZ@TOP
Дата 4.10.2006, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



Opik, пиши спецификаицю системы, как будет работать и т.п., структура таблиц, логика работы системы прав. 
Если будут вопросы по ядру, обращайся ко мне - я все объясню. В принципе ядро у нас будет масштабируемое и гибкое, так что проблем с внедрением быть не должно.


Цитата(Wowa @  1.10.2006,  20:44 Найти цитируемый пост)
Кстати, предлагаю сделать возможным подключать базы юзеров сторонних движок для прохождение авторизации. Например так, чтобы пользователи форума Invision могли залогиниться на сайте с Vingrad CMS. (естественно при этом должен быть обеспечен доступ к таблице ibf_users). На мой взгляд это довольно легко реализовать, но польза будет колоссальная. 

Я думаю можно реализовать некие плагины под это дело. А то и вовсе авторизовывать через SOAP сервис какой.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Wowa
Дата 22.10.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Опик с сегодняшнего дня в отпуске 41 день. Поэтому системой прав придеться заняться мне.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Vingrad CMS | Следующая тема »


 




[ Время генерации скрипта: 0.1695 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.