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