Основная идея, лежащая в основе шаблонов прав доступа, заключается в назначении некоторого заранее определенного набора прав доступа к объекту.
Шаблоны прав доступа обычно используются для организации простейшего документо-оборотного цикла. Например, с одной стороны, новая статья не должна быть доступна обычным посетителям сайти, а с другой, полностью доступна редакторскому составу и администраторам. Однако после опубликации статьи посетители также должны получить доступ на ее просмотр. При этом редактор может в любой момент сделать статью недоступной для посетителей, сняв ее с публикации.
Как это можно реализовать, используя шаблоны прав доступа? Довольно просто - необходимо определить шаблон прав доступа, который будет применяться к статье, при выполнении следующих действий над ней: создание(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, ), ... }
Обсуждение