определить роль доступа для всех пользователей (пользователь, гость, администратор, ..) в yii2 - PullRequest
0 голосов
/ 14 октября 2019

Я использую rbac (dektrium) и ACF для проверки доступа к пользователям в моем проекте (yii2). Например, я создал некоторую роль: admin, manager, suser, user, .. У меня есть некоторые действия, которые все пользователи могут использовать, например, view view. Как определить в методе поведения, что все пользователи могут использовать действие просмотра? Для этого мы назначили действия пользователю '*' в yii1.

...
    array('allow',  // allow all users to perform 'index' and 'view' actions
                    'actions'=>array('view'),
                    'users'=>array('*'),
                ),
...

в yii2 используйте этот код ()

...
 [
                    'allow' => true,
                    'actions' => ['view'],
                    'roles' => ['?'],
                ],
...

, но когда пользователь с правами администратора или администратора хочет получить доступ кmyController / просмотр шоу запрещен. только гости могут получить доступ к myController / view, как определить роль или доступ для доступа ко всем пользователям по умолчанию?

1 Ответ

0 голосов
/ 14 октября 2019

Если вы хотите разрешить всем доступ к действию, тогда нет необходимости применять фильтр доступа для этого действия. Чтобы не применять фильтр доступа для определенных действий, вы можете использовать $except свойство yii\filters\AccessControl. Например, как это:

public function behaviors()
{
    return [
        'access' => [
             'class' => AccessControl::className(),
             'except' => ['view'],
             'rules' => [
                //rules for other actions ...
             ]
         ],
         //other behaviors ...
    ];
}

Другой вариант будет использовать комбинацию ролей ? (гости) и @ (все вошли в систему пользователей), как это:

[
    'allow' => true,
    'actions' => ['view'],
    'roles' => ['?', '@'],
]

В yii\filters\AccessControl также есть свойство $only, позволяющее применять фильтр только к действиям с явно именованными именами. Но лучше использовать $except по соображениям безопасности.

Ресурсы:

...