После игры с yii2 фильтрами контроля доступа я подошел к этому Answer, что мне очень помогает. Я попытался ограничить доступ, выполнив следующие действия:Yii2 Restricted AccessControlFilter Logic
На основе this учебника я создал AccessRule. Я добавил следующую логику.
...
// Check if the user is logged in, and the roles match
} elseif (!$user->getIsGuest() && $role === '#' && $user->can("admin")) {
return true;
} elseif (!$user->getIsGuest() && $role === '~' && $user->can("admin")) {
return true;
}
...
В то время как метод $user->can("admin")
происходит от this простого модуля аутентификации пользователя yii2.
Итак, я хочу ограничить все по умолчанию и открывать действия/стороны, если это необходимо.
Я добавил следующее к моей конфигурации (web.php)
...
'as beforeRequest' => [
'class' => 'yii\filters\AccessControl',
'ruleConfig' => [
'class' => 'app\components\AccessRule'
],
'rules' => [
[
'allow' => true,
'roles' => ['#'],
],
...
Это означает, что пользователь, который имеет роль администратора разрешено делать все. Все остальные роли/пользователи (гости, @
или ~
(вход в систему, но не роль администратора)) до сих пор не могут ничего сделать.
Конечно, пользователю с ролью ~
должно быть разрешено делать некоторые вещи. Так я открыл разрешение на один контроллер и добавил следующее поведение
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'ruleConfig' => [
'class' => AccessRule::className()
],
'only' => ['index'],
'rules' => [
[
'actions' => ['index'],
'allow' => true,
'roles' => ['~'],
],
],
],
...
Unfortanatly пользователь с ролью ~
еще не может доступа индекс действия для этого spezified контроллера.
Как моя логика/мышление неуместны?
Является ли проблема последовательностью, вызывающей фильтры контроля доступа?
попробуйте @ вместо ~ – bxN5
@Roman изменено поведение контроллера на «@»; пользователь все еще не может получить доступ к сайту – Luc