2016-09-05 5 views
0

У меня есть 2 приложения: интерфейс и бэкэнд.Запретить доступ к приложению для роли. Yii2

Пользователи на интерфейсе имеют роль «клиент».

Как отключить доступ к пользователям бэкэнда приложения с ролью «клиент». Все остальные роли имеют доступ. site/login на базе позволяют всем пользователям.

Я написал следующий код в моем main.php файле:

'as beforeRequest' => [ 
    'class' => 'yii\filters\AccessControl', 
    'rules' => [ 
     [ 
      'allow' => true, 
      'controllers' => ['site'], 
      'actions' => ['login'], 
      'roles' => ['?'], 
     ], 
     [ 
      'allow' => false, 
      'roles' => ['client'], 
     ], 
    ], 
    'denyCallback' => function() { 
     return Yii::$app->response->redirect(['site/login']); 
    }, 
], 

У меня есть ошибка: ERR_TOO_MANY_REDIRECTS в хроме.

+0

Являются ли пользователи с ролью «клиент» вошедшим в интерфейс? – topher

+0

да! Для доступа к интерфейсу пользователи должны войти в систему. – LostDok

ответ

1

From the guide'roles' => ['?']:

matches a guest user (not authenticated yet)

Поскольку пользователь вошел в систему, они застряли в петле перенаправлением, вызванное вторым правилом и denyCallback т.е.

  1. Пользователь регистрируется в но роли client и поэтому не допускается.
  2. Поскольку пользователю отказано в доступе, перенаправление на site/login.
  3. См 1.

Это может быть исправлено путем исключения roles элемент в своем первом правиле:

If [role] is not set or empty, it means this rule applies to all roles.

ОДНАКО ЭТО НЕПРАВИЛЬНО ПОДХОД

Пользователи, которые вошли в но имеют роль client, следует лишить доступ к бэкэнд. Отправка их для входа в систему не поможет, так как они уже вошли в систему. Правильный ход действий - отправить их на страницу ошибок интерфейса.

+0

Мое первое правило: '[ 'позволяет' => верно, 'контролеры' => [ 'сайт'], 'действия' => [ 'Войти'], ],' Но я все еще получаю ошибку 'ERR_TOO_MANY_REDIRECTS ' – LostDok

Смежные вопросы