====== Введение в систему прав ====== 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 нет да Это означает что наш пользователю позволено отображать все статьи (так как он пользователь и группы посетителей и группы администраторов), и удалять все статьи.