Своя CMS – разделение прав
Это вторая статья из цикла "CMS на Kohana". Первая статья.
Попытаюсь объяснить суть разделения прав в моей еще не написанной, но уже обдуманной на сто раз CMS.
Итак мне нужно, чтобы разные группы пользователей имели разные права доступа к компонентам, модулям системы. Кроме того, каждый модуль может иметь несколько действий, поэтому логично бы одним пользователям разрешить например удаление, другим запретить.
Права решил хранить в BD и храню их в виде строки со столбцами: id, controller, com, act, value.
Назначение полей id, controller, com, act думаю понятно.
А вот с value немного посложнее.
Вот в чем дело. Каждый пользователь в Kohana (а использую я стандартный модуль авторизации AUTH) принадлежит как минимум к группе Login и возможно к еще нескольким группам. Поэтому в зависимости в каких группах состоит пользователь - такие и права. Соответственно нужно охарактеризовать принадлежность к нужным группам одним значением.
Самое простое, что пришло в голову - перемножить id групп данного пользователя и получить уникальное число. Назавем это число коэфициентом доступа (КД)
Далее.
- В поле value содержится строка, в которой перечислены через запятую те КД, для которых данное дествие в данном контроллере разрешено.
- Также поле value может содержать текстовую строку "ALL", в таком случае данное действие разрешено всем группам.
- Если записи для действия в базе не имеется, то действие запрещено всем группам.
Реализуя данный алгоритм, получаем слудующуй последовательность выяснения - есть доступ или нет.
- Пользователь переходит по ссылке (или вводит в адресную строку соответствующий URL).
- Передается управление соответствующему контроллеру.
- Далее идет обращение к модулю, который отвечает за реализацию компонентной системы.
- Там метод модуля Permisions определяет разрешить доступ или нет.
- Ну и соответственно выдает решение.
Ну вот в кратце суть. Если что-то не совсем понятно спрашивайте в комментах, обязательно напишу и разъясню. Если есть идеи другой реализации со стандартным кохановским AUTH тоже с удовольствием выслушаю.
Понравилась статья?
Нет обратных ссылок на эту запись.
Март 25th, 2011 - 23:49
..обяснить ..на сро раз CMS. ))
Март 28th, 2011 - 08:24
Спасибо за комментарий. Глупые ошибки))
Апрель 7th, 2011 - 11:31
Интересный топик, Где-то я уже такое видел, .
Апрель 20th, 2011 - 17:20
Видел Ваш модуль тестирования. Вы можете переделать его для джумлы 1.5 за деньги? очень срочно
Апрель 20th, 2011 - 19:31
Срочно не могу, очень много работы. Завален по самое нехочу.
Май 12th, 2012 - 01:51
Спасибо. Прочитал с интересом. Блог в избранное занес=)
Июль 6th, 2012 - 16:20
ИМХО: а есть ли смысл писать в поле value значения через запятую, и потом это обрабатывать?
Июль 6th, 2012 - 16:23
Ну насчет есть смысл или нет, сложно сказать. На тот момент мне показалось, что это лучший вариант. Сейчас я возможно хранил бы по другому.
А у вас какие предложения?
Июль 6th, 2012 - 16:37
Думается верным будет не хранить ничего через точку запятой в БД, просто выбирать по id, будет точно такой же массив для обработки, в value записывать права к примеру цифрами, а может даже и словами (другому программеру будет легче разобраться), например, в поле value написать 1 — это будет означать = гость, если 2 — данный гость указал емаил = имеет право прочитать не только вступление, но и полностью статью, 3 — еще какой то юзер…
пару номеров пропустим
например, 6 — пользователь зашел через соц сеть = может читать, писать и удалять
7 — пользователь дал доступ к друзьям из соц сети = может писать коменты посредством плагина соц сети — и комен останется у него в ленте, это увидят друзья
ну вот как то так, каждое право это цифра, чем она выше тем больше прав
Июль 6th, 2012 - 16:42
Да пожалуй, буду переписывать напишу так.
Декабрь 9th, 2012 - 04:01
А интегрировать с Zend_Acl не было бы самым простым решением? Просто сам сейчас пишу CMS. Некоторые вещи заимствую из ZF
Январь 23rd, 2013 - 08:37
Возможно и хорошее решения, но я понятия не имею что это такое. Надо посмотреть Zend_Acl. Спасибо.