PHP/Yii2/Behaviors/EVENT - из поведения отправить гостя на страничку с авторизацией

Создал свое поведение,к примеру, GuestBehavior. Присоединил поведение к базовому контроллеру BaseController. В этом поведении отловил событие EVENT_BEFORE_ACTION методом beforeActions, которое дает нам(мне) возможность сделать какие действия перед началом роутинга

    class GuestBehavior extends Behavior
{
    public function events() {
        return [
          Controller::EVENT_BEFORE_ACTION => 'beforeActions',
        ];
    }

    public function beforeActions() {

        if(Yii::$app->user->isGuest)
            //хочу перенаправить гостя на страницу с авторизацией ????  $this->owner->render('login')
        else
            //ничего не делать, ибо пользователь авторизован

    }

Концепция самого фреймворка находиться в процессе изучения, поэтому прошу осведомленных о помощи. Пытался сделать через $this->owner->render('login') (где owner - есть экземляр компонента, к которому присоединено поведение), но очевидно что это не работает, ибо цикл работы приложения ломается(


Ответы (1 шт):

Автор решения: fedornabilkin

В Yii2 уже есть готовый фильтр доступа для таких случаев. Называется ACF или класс AccessControl. Его использование интуитивно понятно, а детали и нюансы можно погуглить.

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::class,
            'only' => ['login', 'logout', 'signup'],
            'rules' => [
                [
                    'allow' => true,
                    'actions' => ['login', 'signup'],
                    'roles' => ['?'],
                ],
                [
                    'allow' => true,
                    'actions' => ['logout'],
                    'roles' => ['@'],
                ],
            ],
        ],
    ];
}

? - гость, @ - авторизованный. Если гость и доступ запрещен, то произойдет перенаправление на страницу авторизации (действие по умолчанию). Более подробно на сайте руководства https://www.yiiframework.com/doc/guide/2.0/ru/security-authorization

→ Ссылка