Cakephp: Порядок оценки AuthComponent и как перенаправить на действие
Добрый день всем, что касается компонента auth. Я делаю несколько тестов, чтобы лучше понять инструмент, в целях проверки концепции я хочу, чтобы аутентифицированный пользователь-администратор был авторизован для доступа к любому действию, но если авторизованный пользователь имеет роль "supervisor", в состоянии индексировать действия, просматривать и редактировать в "RequestsController.php", я пытаюсь такой подход: 1) разрешить все для роли администратора и запретить все для кого-либо еще в AppController.php. 2) Разрешить явно "супервизор" в "RequestsController.php" и запретить любую другую роль.
Сомнение состоит в том, что после некоторых тестов происходит то, что, если я авторизую пользователя-администратора только в AppController.php, перенаправления позволяют мне только перейти в /webroot/, но если я разрешаю роль администратора в RequestsController.php. Я могу видеть запросы без проблем
Метод IsAuthorize в AppController
public function isAuthorized($user)
{
//privileges 1 means admin
if ($user['privileges']==1){
debug($user);
return true;
} else {
debug($user);
return false;
}
}
Метод IsAuthorize в контроллере запросов
public function isAuthorized($user)
{
//privileges 9 means supervisor
if ($user['privileges']==9){
debug($user);
$action = $this->request->getParam('action');
if (in_array($action, ['index', 'view', 'edit'])) {
debug($user);
return true;
}
return false;
} else {
debug($user);
return false;
}
}
Поскольку мне не ясно, в каком порядке обрабатывается функция isAuthorized или почему происходит перенаправление на запрос (даже если это "AppController.php" или "RequestsController.php"), поэтому я думаю, что мне придется explicity авторизовать роль администратора во всех контроллерах
1 ответ
Когда используешь ControllerAuthorize
, AuthComponent
позвоню isAuthorized()
метод только на активном контроллере. Итак, в вашем примере, когда запрашиваете какое-либо действие от RequestsController
, только RequestsController::isAuthorized()
будет вызван, запретив доступ пользователям, которые имеют привилегии, отличные от 9.
Если вы хотите разрешить доступ администраторам, вы должны изменить RequestsController::isAuthorized()
следующее:
public function isAuthorized($user)
{
//privileges 9 means supervisor
if ($user['privileges']==9){
debug($user);
$action = $this->request->getParam('action');
if (in_array($action, ['index', 'view', 'edit'])) {
debug($user);
return true;
}
return false;
} else {
debug($user);
return parent::isAuthorized($user); //changed this line
}
}
Дополнительная информация: CakePHP 3.x AuthComponent - Авторизация