Beginner WEB-developer Blog of WEB-design. Most development in Kohana. Writing the components and modules for Joomla!

29Янв/1112

Своя CMS – разделение прав

Разделение прав

Разделение прав

Это вторая статья из цикла "CMS на Kohana". Первая статья.

Попытаюсь объяснить суть разделения прав в моей еще не написанной, но уже обдуманной на сто раз CMS.

Итак мне нужно, чтобы разные группы пользователей имели разные права доступа к компонентам, модулям системы. Кроме того, каждый модуль может иметь несколько действий, поэтому логично бы одним пользователям разрешить например удаление, другим запретить.

Права решил хранить в BD и храню их в виде строки со столбцами:  id, controller, com, act, value.

Назначение полей id, controller, com, act думаю понятно.

А вот с value немного посложнее.

Вот в чем дело. Каждый пользователь в Kohana (а использую я стандартный модуль авторизации AUTH) принадлежит как минимум к группе Login и возможно к еще нескольким группам. Поэтому в зависимости в каких группах состоит пользователь - такие и права. Соответственно нужно охарактеризовать принадлежность к нужным группам одним значением.

Самое простое, что пришло в голову - перемножить id групп данного пользователя и получить уникальное число. Назавем это число коэфициентом доступа (КД)

Далее.

  • В поле value содержится строка, в которой перечислены через запятую те КД,  для которых данное дествие в данном контроллере разрешено.
  • Также поле value может содержать текстовую строку "ALL", в таком случае данное действие разрешено всем группам.
  • Если записи для действия в базе не имеется, то действие запрещено всем группам.

Реализуя данный алгоритм, получаем слудующуй последовательность выяснения  - есть доступ или нет.

  1. Пользователь переходит по ссылке (или вводит в адресную строку соответствующий URL).
  2. Передается управление соответствующему контроллеру.
  3. Далее идет обращение к модулю, который отвечает за реализацию компонентной системы.
  4. Там метод модуля Permisions определяет разрешить доступ или нет.
  5. Ну и соответственно выдает решение.

Ну вот в кратце суть. Если что-то не совсем понятно спрашивайте в комментах, обязательно напишу и разъясню. Если есть идеи другой реализации со стандартным кохановским AUTH тоже с удовольствием выслушаю.

Комментарии (12) Пинги (0)
  1. ..обяснить ..на сро раз CMS. ))

  2. Спасибо за комментарий. Глупые ошибки))

  3. Интересный топик, Где-то я уже такое видел, .

  4. Видел Ваш модуль тестирования. Вы можете переделать его для джумлы 1.5 за деньги? очень срочно

  5. Спасибо. Прочитал с интересом. Блог в избранное занес=)

  6. ИМХО: а есть ли смысл писать в поле value значения через запятую, и потом это обрабатывать?

    • Ну насчет есть смысл или нет, сложно сказать. На тот момент мне показалось, что это лучший вариант. Сейчас я возможно хранил бы по другому.
      А у вас какие предложения?

  7. Думается верным будет не хранить ничего через точку запятой в БД, просто выбирать по id, будет точно такой же массив для обработки, в value записывать права к примеру цифрами, а может даже и словами (другому программеру будет легче разобраться), например, в поле value написать 1 — это будет означать = гость, если 2 — данный гость указал емаил = имеет право прочитать не только вступление, но и полностью статью, 3 — еще какой то юзер…

    пару номеров пропустим

    например, 6 — пользователь зашел через соц сеть = может читать, писать и удалять
    7 — пользователь дал доступ к друзьям из соц сети = может писать коменты посредством плагина соц сети — и комен останется у него в ленте, это увидят друзья

    ну вот как то так, каждое право это цифра, чем она выше тем больше прав

  8. А интегрировать с Zend_Acl не было бы самым простым решением? Просто сам сейчас пишу CMS. Некоторые вещи заимствую из ZF


Leave a comment

Нет обратных ссылок на эту запись.