Kohana 3 код авторизации изменить - PullRequest
0 голосов
/ 29 октября 2011

Я использую код прямо из руководства по кохане для защиты веб-сайтов на основе учетных данных для входа

Проблема в том, что код, кажется, только проверяет, вошел ли пользователь в систему и не различает ли его роль.

Как бы я изменил этот скрипт, чтобы только администратор мог получить доступ к этому действию

В базовом контроллере у меня есть код

public $assert_auth = FALSE;
public $assert_auth_actions = FALSE;


public function before()
{
parent::before();
$this->_user_auth();

}

protected function _user_auth()
{
$action_name = Request::instance()->action;
if (($this->assert_auth !== FALSE && Auth::instance()->logged_in($this->assert_auth) === FALSE)
|| (is_array($this->assert_auth_actions) && array_key_exists($action_name, $this->assert_auth_actions)
&& Auth::instance()->logged_in($this->assert_auth_actions[$action_name]) === FALSE))
{
if (Auth::instance()->logged_in())
{
Request::instance()
->redirect('');
}
else
{
Request::instance()
->redirect('admin/login');
}
}

в контроллерах для страниц админки есть код

public $assert_auth_actions = array(
'index' => array('login')
);

1 Ответ

0 голосов
/ 29 октября 2011

Во-первых, я хочу отметить, что приведенный выше код предназначен для Kohana 3.0, для 3.1 и выше вы должны заменить Request :: instance () -> action на Request :: $ current-> action ().

Если вам нужны одинаковые требования авторизации для всех действий в контроллере, то установите $ assert_auth в массив, содержащий список всех ролей, которые должны быть доступны для него.

Если вы хотите разные требования авторизации для действий в одном и том же контроллере, тогда установите $ assert_auth_actions в качестве многомерного массива. Первое измерение должно быть именем действия, выбрать список ролей, которые пользователь должен иметь для доступа к действию.

...