От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы с вами продолжим работать с фильтром контроля доступа – Yii2 Access Control Filter (ACF). В частности, мы рассмотрим некоторые другие его свойства.
В предыдущей статье мы с вами познакомились с фильтром контроля доступа – поведением, благодаря которому мы можем ограничивать доступ к контроллерам и действиям. В частности, мы с его помощью легко ограничили доступ к модулю админской части и теперь туда может попасть только авторизованный пользователь. Однако ACF имеет и ряд дополнительных свойств, которых мы пока что не касались. Давайте пройдемся по ним.
Для дальнейшей работы давайте добавим в дефолтный контроллер админки дополнительный экшен, к примеру User:
1 2 3 4 |
public function actionUser() { return $this->render('user'); } |
Также создадим еще один контроллер – Test:
Само собой, создадим все необходимые для них виды. Сейчас доступ по умолчанию ко всем контроллерам модуля admin закрыт и при обращении к любому из них происходит редирект на страницу авторизации.
Но что если мы захотим открыть доступ к некоторым из контроллеров модуля? Например, я хочу, чтобы доступ к контроллеру Test был открыт, а доступ к прочим контроллерам продолжал оставаться закрытым. Сделать это поможет свойство controllers. Давайте добавим еще одно правило для поведения ACF:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public function behaviors(){ return [ 'access' => [ 'class' => \yii\filters\AccessControl::className(), 'rules' => [ [ 'allow' => true, 'roles' => ['@'], ], [ 'allow' => true, 'controllers' => ['admin/test'], ], ], ], ]; } |
Этим правилом мы разрешили доступ ко всем действиям контроллера Test модуля Admin. Обратите внимание, в массиве controllers мы перечисляем ID контроллеров. При этом, если это контроллеры модуля, тогда мы должны указать и ID модуля.
Идем дальше. А что если мы хотим разрешить доступ не ко всему контроллеру, а только к конкретным его действиям? В этом случае мы можем обратиться к свойству actions, в массиве которого перечислим все необходимые действия. Примерно так мы можем открыть доступ гостям к экшену User контроллера Default:
1 2 3 4 5 |
[ 'allow' => true, 'controllers' => ['admin/default'], 'actions' => ['user'], ], |
Благодаря набору этих правил мы разрешили доступ гостям ко всем действиям контроллера Test, а также к действию User контроллера Default. Доступ ко всем прочим частям модуля Admin будет по-прежнему ограничен.
Замечательные возможности, не так ли? Однако, это далеко не все возможности. В следующей статье мы рассмотрим еще некоторые свойства фильтра, которые, возможно, пригодятся вам в работе.
А на сегодня все. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.