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);
}