REST (AccessControl) + HttpBearerAuth

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Закрыто
evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

REST (AccessControl) + HttpBearerAuth

Сообщение evgeniy123 » 2017.02.14, 00:14

Здравствуйте. У меня REST идет по запросу user/auth. Среди actions есть один отвечающий за роутинг.
Мне нужно чтобы в зависимости от того зарегистрированные пользователи или нет имели возможность к соответствующим actions через actionAuth. сейчас пишет message": "You are requesting with an invalid credential.", (api_user/auth PUT ). Подскажите как это сделать . Спасибо

Код: Выделить всё

   
   
    public function behaviors(){
        $behaviors = parent::behaviors();
        $behaviors['contentNegotiator'] = [
            'class' => ContentNegotiator::className(),
            'formats' => [
                'application/json' => Response::FORMAT_JSON
            ]
        ];
        $behaviors['authenticator'] = [
            'class' => HttpBearerAuth::className(),
            'only' => ['auth']
         ];

        $behaviors[ 'access'] = [
            'class' => AccessControl::className(),
            'rules' => [

                    [
                        'verbs'=>['put'],
                        'allow' => true,
                        'roles' => ['?'],
                        'actions'=>['auth']

                ],
                [
                    'verbs'=>['patch'],
                    'allow' => true,
                    'roles' => ['@'],
                    'actions'=>['auth']

                ]
            ],
        ];

        return $behaviors;
    } 
    
    public function actionAuth() {
        //$Request = Yii::$app->request;
        //$Method = Yii::$app->request->isPut;

        if (Yii::$app->request->isPut) { // Authorization (Put)
            $this->GetToken();
        } elseif (Yii::$app->request->isPost) { // RenewToken (Post)
            $this->renewToken();
        } elseif (Yii::$app->request->isDelete) { // LogOut (Delete)
            $this->logOut();

        } elseif (Yii::$app->request->isPatch){
       // $this->afterFbRegistration();
        }else  {
            throw new \yii\web\BadRequestHttpException('Not in (Put,Post,Delete, Patch) request!');
        }
    }
        
        

Аватара пользователя
yiijeka
Сообщения: 3049
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: REST (AccessControl) + HttpBearerAuth

Сообщение yiijeka » 2017.02.15, 10:42

В beforeAction вешайте behaviors в зависимости от запроса....

evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

Re: REST (AccessControl) + HttpBearerAuth

Сообщение evgeniy123 » 2017.02.17, 23:51

yiijeka писал(а):
2017.02.15, 10:42
В beforeAction вешайте behaviors в зависимости от запроса....
подскажите как сделать. Я не нашел в нете и не смог додуматься. С поведениями вообще никогда не приходилось сталкиваться?Пока остановился на этом но что то не работает :

Header:
Authorization: Bearer 7689YIHJKLJ9UPOMK

Controller:

Код: Выделить всё

 public function beforeAction(){

        if(Yii::$app->request->isDelete){

         $this->behaviors['authenticator'] = [
                     'class' => HttpBearerAuth::className()
                   ];
    }
    }
    

Код: Выделить всё

public actionTest(){

echo Yii:$app->user->id;   ""  :(
}
    

evgeniy123
Сообщения: 395
Зарегистрирован: 2011.11.01, 17:29

Re: REST (AccessControl) + HttpBearerAuth

Сообщение evgeniy123 » 2017.02.20, 07:27

использовал в маршрутизации привязку с методу +

Код: Выделить всё

 $behaviors['authenticator'] = [
            'class' => HttpBearerAuth::className()
         ];
         

Закрыто