@AlexAll

Как запретить юзеру логинится в админке?

Такой вопрос, если я закрываю юзеру доступ в админку вот так контролере Site

'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['login', 'error'],
                        'allow' => true,
                    ],
                    [
                        'actions' => ['logout', 'index'],
                        'allow' => true,
                        'roles' => ['admin'],
                    ],
                ],
            ],


Или даже так в main конфиге для всего бэкэнда

'as access' => [
        'class' => 'yii\filters\AccessControl',
        'except' => ['site/login', 'site/error'],
        'rules' => [
            [
                'allow' => true,
                'roles' => ['admin'],
            ],
        ],
    ],


То любой юзер может авторизоваться в backend и увидит главную и менюшюку админки, естественно он там нечего сделать не может и больше увидеть тоже. Но хотелось бы чтобы если это не админ залогинился то выкидывало исключение. Как это сделать?
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 2
amark
@amark
rush less, feel more
В контроллере, который проверят авторизацию, добавьте сразу условие проверки уровня доступа.

Пример возможной реализации на первом Yii
public function actionLogin()
    {
        if (!Yii::app()->user->isGuest)
        {
            $role = Yii::app()->user->role;
            if ($role)
            {
                $this->redirect(Yii::app()->params['modules_default_pages'][$role]);
            }
        }

        $model = new LoginForm;

        // if it is ajax validation request
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'login-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }

        // collect user input data
        if (isset($_POST['LoginForm']))
        {
            $model->attributes = $_POST['LoginForm'];

            if ($model->validate() && $model->login())
                    $this->redirect(Yii::app()->user->returnUrl);
        }

        $this->render('login', array('model' => $model));
    }
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
увидит главную и менюшюку админки,

только в том случае, если Вы не измените layout для страницы ошибки

Вы не там проблему ищите. Она в том, что в Вас 1 layout и для публичных страниц и для страниц с ограниченным доступом. У login и error должен быть layout без менюшек и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы