Yii2休息:对的checkAccess restAction(Yii2 rest: checkAc

2019-09-25 18:54发布

解决后, 该另一个问题 ,我们现在想检查验证的用户可以查看,更新或删除现有记录。 由于checkAccess()默认情况下,在全称为restAction S中的以下似乎是最逻辑的事情尝试:

public function checkAccess($action, $model = null, $params = []) {
    if(in_array($action, ['view', 'update', 'delete'])) {
        if(Yii::$app->user->identity->customer->id === null
         || $model->customer_id !== Yii::$app->user->identity->customer->id) {
            throw new \yii\web\ForbiddenHttpException('You can\'t '.$action.' this item.');
        }
    }
}

但API似乎忽略这个功能。 我们在控制器中添加此功能。 这些动作(查看,更新和删除)是默认restAction秒。

我们BaseController设置这样的动作:

...
'view' => [
    'class' => 'api\common\components\actions\ViewAction',
    'modelClass' => $this->modelClass,
    'checkAccess' => [$this, 'checkAccess'],
    'scenario' => $this->viewScenario,
],
...

难道我们忘了点什么?

Answer 1:

只需添加自定义操作中以下执行任何其他代码,因为它是在默认视图操作完成之前( 在这里看到源代码 ) :

if ($this->checkAccess) {
    call_user_func($this->checkAccess, $this->id, $model);
}

注意: $this->checkAccess在父定义yii\rest\Action使您的自定义类的ActionView需要或者延长yii\rest\Action或重新定义变量public $checkAccess;



Answer 2:

很明显,我们应该看到的viewAction不是默认,但改变api\common\components\actions\ViewAction ...不知道我们如何错过了...



文章来源: Yii2 rest: checkAccess on restAction
标签: rest yii2