Контроль доступа Yii2
В шаблоне yii2 advanced по дефолту сделан AccessControl в бэкэнд части
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['login', 'error'],
'allow' => true,
],
[
'actions' => ['logout', 'index','view','update','delete','word','confirmplatform','moderation-questionnaire','moderation-questionnaire-detail','cancelplatform','resend-email'],
'allow' => true,
'roles' => ['admin','moderator'],
],
],
],
Как видно из правил, доступ в админку разрешён только admin и moderator.
Меня смущает то что если попытаться залогиниться в админку под аккаунтом с ролью user то yii пускает внутрь, экшен login отрабатывает. Только на экране мы видим 403 ошибку доступа.
Как сделать так чтобы при вводе "неправильных" аккаунтов просто перебрасывало на форму авторизации в админку с выводом ошибки?
Ответы (2 шт):
Надо заглянуть в AccessControl и посмотреть его поведение, когда доступ ограничен (когда 403 ошибка появляется). Затем создать свой бихевиор и унаследоваться от AccessControl. Переопределить тот метод, который отдает 403 ошибку, когда доступ запрещен и добавлять там в сессию ошибку, затем редиректить куда надо.
Как по мне, так 403 это корректная ошибка, если нет доступа.
Так чтобы было понятно:
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['login', 'error'],
'allow' => true,
],
[
'actions' => ['logout', 'index','view','update','delete','word','confirmplatform','moderation-questionnaire','moderation-questionnaire-detail','cancelplatform','resend-email'],
'allow' => true,
'roles' => ['admin','moderator'],
],
],
'denyCallback' => function($rule, $action) {
Yii::$app->session->setFlash('info', 'ACCESS DENIDED!!!');
return $action->controller->redirect('login');
},
],