如何在yii2中过滤用户的视图?

时间:2016-08-29 19:02:38

标签: url login yii2 access

在我的项目中,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.

如何防止出现这个问题?

1 个答案:

答案 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.');
}