При работе с RBAC в Yii2 может быть необходимость закрыть все action из контроллера по определенным правилам, но при этом несколько из них все-таки следует оставить открытыми или, например, закрыть по другим правилам. В этой статье пример решения проблемы.
Ниже приведу метод behaviors() из контроллера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
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
.
Надеюсь смог обьяснить приведенный пример. Если остались вопросы — добро пожаловать в комментарии.