Skip to content
butschster edited this page Mar 25, 2014 · 1 revision

Проверка прав доступа

В KodiCMS есть инструмент для проверки прав доступа к данным, разделам сайта и т.д.

По умолчанию идет проверка доступа ко всем экшенам контроллеров CMS для пользователей без роли администратора.

Пример:

class Controller_Test extends Controller_System_Backend {

	// Экшены для которых разрешен доступ без проверка прав
	public $allowed_actions = array(
		'not_secured'
	);

	public function before()
	{
		// Динамически настраиваемые права доступа к экшену 
		if(...)
		{
			$this->allowed_actions[] = 'dynamic';
		}

		parent::before();
	}

	public function action_index()
	{

	}

	public function action_dynamic()
	{

	}


	// не будет осуществлена проверка доступа, т.к. содержится
	// в массиве $allowed_actions
	public function action_not_secured()
	{
		....

		if( ! ACL::check('test.view') )
		{
			// В качестве необязательно параметра можно указать текст который увидит пользователь
			$this->_deny_access();
		}
	}
}

Права доступа к контроллерам (Разделам) настраиваются в разделе "Роли". Для того, чтобы настройки прав появились в разделе "Роли" их необходимо описать в конфиге config\permissions.php

return array(
	'test' => array(
		array(
			'action' => 'index',
			'description' => 'View test action index'
		),
		array(
			'action' => 'dynamic',
			'description' => 'View test action dynamic'
		),
	
		....
	)
);

При конвертации конфига все права имеют вид:

  • test.index,
  • test.dynamic
  • ....

и их проверка осуществляется как Acl::check('test.index')

При проверке прав доступа к экшену контроллера происходит вызов Acl::check( $this->request() ), где реквест преобразуется в строку controller.action или directory.controller.action если находится не корневой папке контроллера.