общий метод для проверки состояния перед всеми контроллерами в CakePHP - PullRequest
1 голос
/ 20 сентября 2019

У меня есть приложение в cakephp, где зарегистрированный пользователь должен иметь статус active, в противном случае он должен перенаправить на контроллер, где пользователь должен отправить свое заявление.

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

Содержимое моего Appcontroller:

public function initialize()
    {
        parent::initialize();

        $this->loadComponent('RequestHandler', [
            'enableBeforeRedirect' => false,
        ]);
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authError' => 'You have been logged out due to period of inactivity.',
            'loginAction' => [
                'controller' => 'Users',
                'action' => 'login'
            ],
            'loginRedirect' => [
                'controller' => 'Users',
                'action' => 'dashboard'
            ],
            'logoutRedirect' => [
                'controller' => 'Users',
                'action' => 'logout'
            ],
        ]);

1 Ответ

1 голос
/ 20 сентября 2019

Вы можете использовать beforeFilter Метод в вашем AppController для выполнения такой проверки.Предположим, что имя вашего контроллера, куда вы хотите перенаправить, равно YourController, тогда ваш метод должен выглядеть следующим образом.

    public function beforeFilter( $event ) {

        if ($this->Auth->user()) { //If User is logged in.
            if ( $this->request->controller != 'YourController' ) { //If Request Controller is other than YourController
                $status  = $this->Auth->user('status'); //Get the Status
                if( $status != 'active' ) { //If Status is not active
                    //Redirect Here
                    return $this->redirect(
                        ['controller' => 'YourController', 'action' => 'index'];
                    );                  
                }   
            }
        }
    }

...