在我的项目中,Logged用户可以访问她的视图,但我希望用户无法使用更改URL访问其他用户。 在这个usersController中:
[
'allow' => true,
'actions' => ['update', 'view'],
'matchCallback' => function () {
return ($this->checkAccess(User::ROLE_USER));
},
],
和
public function actionView($id)
{
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
如果user1转到:web / users / view @ id = 1,他可以转到web / users / view @ id = 2.
如何防止出现这个问题?
答案 0 :(得分:0)
一个解决方案可能是,您可以从会话中获取相同的ID,而不是从url获取用户的ID。类似的东西:
public function actionView()
{
if (!Yii::$app->user->isGuest) { // the user is logged in
$id = Yii::$app->user->getId(); // get the id
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
throw new NotFoundHttpException('The requested page does not exist.');
}
对于任何用户,网址都是web/users/view
。
或者您也可以将ID与用户当前ID进行比较:
public function actionView($id)
{
if (!Yii::$app->user->isGuest && $id == Yii::$app->user->getId()) {
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
throw new NotFoundHttpException('The requested page does not exist.');
}