Как ограничить доступ а админку с помощью RBAC[Решено]

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
Аватара пользователя
svil
Сообщения: 560
Зарегистрирован: 2018.02.12, 22:41

Как ограничить доступ а админку с помощью RBAC[Решено]

Сообщение svil » 2019.06.22, 22:20

У меня RBAC из коробки. В админке разграничение админа и менеджера настроено. Работал единый вход с фронтенда. На фронтенде пользователь. Но про прямой ссылке boxic/admin/ я могу попасть в админку. И как это убрать? Чтобы перекидывло на фронтенд?
Пишу в контроллере SiteController админки в акшенах index, login, logout

Код: Выделить всё

  if (Yii::$app->user->isGuest) {
            //   return $this->goHome();
            return $this->redirect(Yii::$app->urlManager->createUrl('/../../site/index'));
        }
Выдает ошибку

Код: Выделить всё

Trying to get property of non-object

Код: Выделить всё

      'brandUrl' => Yii::$app->homeUrl,
        'options' => [
            'class' => 'navbar-inverse navbar-fixed-top',
        ],
    ]);
    $menuItems[] = ['label' => 'Главная', 'url' => ['/../../']];
    $menuItems[] = '<li>'
        . Html::beginForm(['/site/logout'], 'post')
        . Html::submitButton(
            'Выход (' . Yii::$app->user->identity->surname . ')',  //вот эта строчка подчеркивается
            ['class' => 'btn btn-link logout']
        )
        . Html::endForm()
        . '</li>';
    echo Nav::widget([
        'options' => ['class' => 'navbar-nav navbar-right'],
        'items' => $menuItems,
    ]);
    NavBar::end();


Последний раз редактировалось svil 2019.06.24, 12:15, всего редактировалось 2 раза.

Аватара пользователя
svil
Сообщения: 560
Зарегистрирован: 2018.02.12, 22:41

Re: Как ограничить доступ а админку с помощью RBAC

Сообщение svil » 2019.06.22, 22:32

Вот так написала от уровня manager в админку пропускает и пишет Требуется вход, но надо чтобы перекидывало на фронтенд на авторизацию

Код: Выделить всё

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['login', 'logout'], // действия в контроллере
                'rules' => [ // правила к действиям
                    [
                        'allow' => true,
                        'actions' => ['login'], // действия в контроллере
                        'roles' => ['manager'], // Доступ к действиям только для manager, admin
                      
                    ],
                    [
                        'allow' => true,
                        'actions' => ['logout'], // действия в контроллере
                        'roles' => ['manager'], // Доступ к действиям только для для manager, admin
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }

Аватара пользователя
svil
Сообщения: 560
Зарегистрирован: 2018.02.12, 22:41

Re: Как ограничить доступ а админку с помощью RBAC

Сообщение svil » 2019.06.22, 22:56

https://www.yiiframework.ru/forum/viewtopic.php?t=33412
Нашла - может что-то и наваяю c before action.
Хотя лучше пермишены настроить для каждого экшена в контроллерах. А потом уже перекидывать неменеджера, неадмина из админки на фронтенд.

Аватара пользователя
svil
Сообщения: 560
Зарегистрирован: 2018.02.12, 22:41

Re: Как ограничить доступ а админку с помощью RBAC

Сообщение svil » 2019.06.23, 01:50

Код: Выделить всё

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['*'],
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['admin', 'manager'],
                    ],
                ],
                'denyCallback' => function () {
                    return Yii::$app->response->redirect(['./../../']);
                },
            ],
        ];
    }

Ответить