====== Шаблоны прав доступа ======
Основная идея, лежащая в основе шаблонов прав доступа, заключается в назначении некоторого заранее определенного набора прав доступа к объекту.
Шаблоны прав доступа обычно используются для организации простейшего документо-оборотного цикла. Например, с одной стороны, новая статья не должна быть доступна обычным посетителям сайти, а с другой, полностью доступна редакторскому составу и администраторам. Однако после опубликации статьи посетители также должны получить доступ на ее просмотр. При этом редактор может в любой момент сделать статью недоступной для посетителей, сняв ее с публикации.
Как это можно реализовать, используя шаблоны прав доступа? Довольно просто - необходимо определить шаблон прав доступа, который будет применяться к статье, при выполнении следующих действий над ней: создание(create), публикация(publish), снятие публикации(unpublish).
Рассмотрим пример, каким образом указывается в контроллере при описании действий тот факт, что то или иное действие может иметь шаблон прав доступа:
class articles_controller extends site_object_controller
{
function _define_actions()
{
return array(
'create' => array(
'action_path' => '/article/create_article_action',
'action_name' => strings :: get('create_article', 'article'),
'can_have_access_template' => true,
),
'publish' => array(
'action_name' => strings :: get('publish'),
'action_path' => '/doc_flow_object/set_publish_status_action',
'can_have_access_template' => true,
),
'unpublish' => array(
'action_name' => strings :: get('unpublish'),
'action_path' => '/doc_flow_object/set_publish_status_action',
'can_have_access_template' => true,
),
);
}
}
Здесь мы описали три действия 'create', 'publish' и 'unpublish', которые могут иметь шаблон прав доступа, используя свойство 'can_have_access_template'. Теперь в панели управления в разделе управления правами для контроллеров можно установить шаблоны прав доступа для данного контроллера. Что мы и сделаем, установим следующий шаблон прав:
^ ^ create ^ publish ^ unpublish ^
| visitors | - | + | - |
| author | + | + | + |
| admin | + | + | + |
Физически шаблоны прав действия представляют из себя таблицу, в которой указано, каким группам будет предоставлен/запрещен доступ к данному объекту при выполнении того или иного действия.
Важно помнить, что если для действия нет шаблона доступа(например, он пуст), хотя и в контроллере явно прописано, что таковой может быть, то права доступа копируются из родительского объекта.
Зачастую действие по созданию объекта('create') находится в контроллере родительского объекта, поэтому свойство 'can_have_access_template' необходимо прописать именно в "родительском" контроллере, к примеру:
class articles_folder_controller extends site_object_controller
{
function _define_actions()
{
return array(
'create_article' => array(
'action_path' => '/article/create_article_action',
'action_name' => strings :: get('create_article', 'article'),
'can_have_access_template' => true,
),
...
}