Сегодня столкнулся с ситуацией, когда в случае переопределенного beforeAction не срабатывали правила доступа accessControl. Проблему быстро решил, но думаю я не один, кто с ней сталкивался — поэтому напишу решение.
Итак, мой метод имел следующий вид:
public function beforeAction($action)
{
if( !\Yii::$app->user->isPrivateSessionActive() ) {
$this->redirect(['/auth/']);
}
return true;
}
Пока пользователь был авторизован — всё было хорошо, но когда сессия истекла — получили ошибку об ошибке доступа к несуществующему методу — т.к. \Yii::$app->user->identity === null.
Пояснение к возникшей ситуации есть в документации.
Выход, как следствие, должен выглядеть так:
public function beforeAction($action)
{
if( !parent::beforeAction($action) ){
return false;
}
if( !\Yii::$app->user->isPrivateSessionActive() ) {
$this->redirect(['/social-box/common/private-auth/']);
}
return true;
}
Т.е. важно сначала запустить всю цепочку обработчиков beforeAction, где как раз и отработает проверка на права доступа accessControl. В случае, если проверка неуспешна — мы возвращаем false. Если же всё хорошо — тогда можем смело выполнять нашу логику.
Если Вам интересен вопрос редиректа в методе beforeAction — здесь Вы можете посмотреть короткую статью по этому вопросу.
На этой всё — если остались вопросы — добро пожаловать в комментарии. Удачи, друзья.