Один контроллер для авторизованных и не авторизованных пользователей?

Есть некий контроллер, нужно, чтобы она был доступен и авторизованным и не авторизованным пользователя?
Как разделить логику?
Сделать его общедоступным, и сделать чтение заголовка с токеном и по нему создать identity?
Не совсем понятна реализация :(

UPD ради бога простите, я не точно сформулировал вопрос, речь идет в контексте REST API, авторизация идет через Bearer Token
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
kimono
@kimono
Web developer
public function behaviors()
{
    return [
        'bearerAuth' => [
            'class' => \yii\filters\auth\HttpBearerAuth::class,
        ],
        'access' => [
            'class' => \yii\filters\AccessControl::class,
            'rules' => [
                [
                    'actions' => ['for-all'],
                    'roles' => ['*'],
                ],
                [
                    'actions' => ['auth-only'],
                    'roles' => ['@'],
                ],
            ],
        ],
    ];
}

public function actionForAll(){
    if (Yii::$app->user->isGuest){
        return $this->forAllFree();
    }
    
    return $this->forAllSecured();
}

private function forAllSecured(){
    return $this->render('for-all', ['hello' => 'Hello ' . Yii::$app->user->identity->username . '!']);
}

private function forAllFree(){
    return $this->render('for-all', ['hello' => 'Hello guest!']);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Вам надо смотреть в сторону поведений, а именно в AccessControl, вот пример:
public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['logout', 'signup'],
                'rules' => [
                    [
                        'actions' => ['signup'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['logout'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы