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