Cakephp: Порядок оценки AuthComponent и как перенаправить на действие - PullRequest
0 голосов
/ 14 сентября 2018

доброго времени суток всем, в отношении компонента 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 Ответ

0 голосов
/ 15 сентября 2018

При использовании 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 - Авторизация

...