Yii2 rest:checkAccess on restation

Yii2 rest:checkAccess on restation,rest,yii2,Rest,Yii2,解决后,我们现在想检查经过身份验证的用户是否可以查看、更新或删除现有记录。由于默认情况下在所有重启操作中调用checkAccess(),因此以下内容似乎是最符合逻辑的尝试: public function checkAccess($action, $model = null, $params = []) { if(in_array($action, ['view', 'update', 'delete'])) { if(Yii::$app->user->ide

解决后,我们现在想检查经过身份验证的用户是否可以查看、更新或删除现有记录。由于默认情况下在所有
重启操作中调用
checkAccess()
,因此以下内容似乎是最符合逻辑的尝试:

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
s

我们的
BaseController
设置如下操作:

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

我们忘了什么吗?

显然,我们应该看到viewAction不是默认的,而是经过修改的
api\common\components\actions\viewAction
。。。不确定我们是如何错过的…

在执行任何其他代码之前,只需在自定义操作中添加以下内容,就像在默认视图操作中所做的那样:

注意:
$this->checkAccess
是在父级
yii\rest\Action
中定义的,因此您的自定义ActionView类需要扩展
yii\rest\Action
或重新定义变量
public$checkAccess

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