Yii2 防止显示来自其他用户的数据

Yii2 防止显示来自其他用户的数据,yii2,Yii2,如何防止来自其他用户的所有detailView显示数据 例如,当您在URL中键入另一个用户的产品ID时,就会发生这种情况。detailView通常显示产品的详细信息,但属于其他用户,甚至可能更改和删除产品。多个选项: 1) 最简单的一种方法是,在显示视图之前,在控制器中检查当前用户是否可以看到产品。如果他无法(通过抛出错误)将其重定向到404页面(或任何您想要显示的错误)。 2) 使用RBAC设置角色以及这些角色可以做什么。这是最专业的选择 3) 您也可以修改accessfilter来执行此操作

如何防止来自其他用户的所有detailView显示数据

例如,当您在URL中键入另一个用户的产品ID时,就会发生这种情况。detailView通常显示产品的详细信息,但属于其他用户,甚至可能更改和删除产品。

多个选项:
1) 最简单的一种方法是,在显示视图之前,在控制器中检查当前用户是否可以看到产品。如果他无法(通过抛出错误)将其重定向到404页面(或任何您想要显示的错误)。
2) 使用RBAC设置角色以及这些角色可以做什么。这是最专业的选择
3) 您也可以修改accessfilter来执行此操作

如果您需要询问如何做到这一点,请选择选项1


如果您想要选项2或3,请先阅读此

Mihai建议的示例


如果不想使用RBAC,可以在控制器中执行类似操作:

protected function findModel($id)
{
    //Check if the author is the current user
    if (($model = Product::findOne($id)) !== null && $model->author_id==Yii::$app->user->id) { 
        return $model;
    } else {
        throw new NotFoundHttpException('The requested page does not exist.');
    }
}
像这样,非作者的用户不能查看、更新或删除产品。

protected function findModel($id)
{
    //Check if the author is the current user
    if (($model = Product::findOne($id)) !== null && $model->author_id==Yii::$app->user->id) { 
        return $model;
    } else {
        throw new NotFoundHttpException('The requested page does not exist.');
    }
}