Limb2 имеет двухуровневую систему прав
Эти этапы логично и тесно связаны. Действие требует набор прав на объекты, которые доступны пользователю. Поэтому для пользователя недостаточно только иметь право на доступ к действию - пользователь должен иметь также доступ к запрошенным объектам. Звучит немного сложно, надеюсь хороший пример сможет все прояснить.
Limb использует только разрешающие (позитивные) записи о доступе. Поэтому пользователь имеет разрешения ото всех групп, в которые он включен, и свои собственные. В настоящее время не возможно ограничить для пользователя доступ к некоторому объекту, если какая либо из групп, куда входит пользователь, имеет право на этот объект.
В Limb 2.4.x нет различия между правами на запись и чтение. Пользователь либо имеет доступ к объекту, либо нет. Если пользователь не имеет право на доступ к объекту, он обычно вообщее не осведомлен о его существовании. Единственный способ увидить такие объекты - напрямую использовать метод fetch() объекта сайта.
Вы можете просматривать и задавать права доступа на объекты через Limb GUI используя страницу /admin/objects_access. Система внутренне позволяет назначать права доступа на объекты для каждого пользователя, однако на нашей практике мы не испытывали такой необходимости, поэтому GUI позволяет назначать права только группы.
Действия - это набор операций. Будучи определенными в контроллере объекта сайта, действия могут применяться непосредственно к объекту сайта или …выпольнять что-нибудь иное. Для выполнения действия пользователь должен иметь право для его выполнение.
Limb предоставляет GUI для управления доступом к действиям через страницу /admin/controllers. Администраторы задают какие действия доступны для групп пользователей. Как было упомято выше, в Limb нет GUI для задания прав на действия для отдельных пользователей. В нашей практике мы еще не встечали ни одного случая, когда бы требовалась такая функциональность, однако реализовать это - не проблема.
Каждое действие требует конкретного набора прав на объекты. Эти права описаны в контроллере объекта сайта. Чтобы все прояснить, давайте посмотрим на один маленький пример:
Предположим, мы имеем некоторый article_controller. Он поддрживает только 2 действия: 'display' and 'delete':
class article_controller extends site_object_controller { function _define_actions() { return array( 'display' => array( [[...]] ), 'delete' => array( [[...]] ), ); } }
Давайте представим, что у нас в системе есть 3 экземпляра статей.
Наш пользователь состоит в 2-х группах: 'visitors' и 'admins'.
Вот права на объекты, которые есть у пользовательских групп:
article1 article2 article3 visitors ok ok admins ok ok
А права на действия для групп выглядят так:
display delete visitors да нет admins нет да
Это означает что наш пользователю позволено отображать все статьи (так как он пользователь и группы посетителей и группы администраторов), и удалять все статьи.