При работе с RBAC в Yii2 может быть необходимость закрыть все action из контроллера по определенным правилам, но при этом несколько из них все-таки следует оставить открытыми или, например, закрыть по другим правилам. В этой статье пример решения проблемы.
Ниже приведу метод behaviors() из контроллера:
public function behaviors()
{
$parentBehaviors = parent::behaviors() ;
$self = [
'client.access' => [
'class' => AccessControl::className(),
'except' => ['check-similar', 'get-info'], // <-- (except) исключаем два метода из действия правила
'rules' => [
[
'allow' => true,
'roles' => ['clients.access'],
],
],
],
// добавляем новое правило для исключенных методов из действия правила
'client-checking.access' => [
'class' => AccessControl::className(),
'only' => ['check-similar', 'get-info'], // <-- (only) добавляем два метода в действие правила
'rules' => [
[
'allow' => true,
'roles' => ['backend.access'],
],
],
],
];
return ArrayHelper::merge($parentBehaviors, $self) ;
}
Давайте ещё раз.
Первое правило применяется ко всем action внутри контроллера и дочерних ему, КРОМЕ ТЕХ, которые указаны в except.
Второе правило применяется ТОЛЬКО к тем action, которые указаны в only.
Надеюсь смог обьяснить приведенный пример. Если остались вопросы — добро пожаловать в комментарии.