如何在yii2中显示该用户在索引页面上创建的记录?

时间:2017-08-21 13:34:22

标签: yii2-basic-app yii2-user yii2-rbac

我正在使用yii2 basic并实现了RBAC。

我有两个角色admin和fieldofficer,并创建了权限和规则以及分配的用户。现在,当管理员登录时,在索引页面上,他应该能够看到所有记录以及他在网格中创建的记录。

当fieldofficer登录时,他应该只能在索引页面中看到他创建的记录。

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

您需要将用户的ID预先加载到搜索模型中。如果安全性存在问题(即:您不希望其他用户无论如何都能绕过此问题),那么您需要检测用户的ID是否已被传递给查询,并将其强制回给您想要的用户(即:登录的用户)。在大多数情况下,您需要额外的安全性,并且应该。

UserPlan替换为您的模型。由于你没有发布代码,我不知道它是什么:)

之前:原始索引示例(由Gii生成):

public function actionIndex()
{
    $searchModel = new UserPlanSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

之后:锁定到当前登录的用户:

public function actionIndex()
{
    $searchModel = new UserPlanSearch();
    $searchModel->user_id = Yii::$app->user->id;

    // override (so users can't bypass)
    $queryParams = Yii::$app->request->queryParams;
    if ( isset($queryParams['UserPlan']['user_id']) ) {
        $queryParams['UserPlan']['user_id'] = Yii::$app->user->id;
    }

    $dataProvider = $searchModel->search($queryParams);
    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

此外,您应该在发布到StackOverflow时发布代码,除非您想要一堆向下投票。只是问问题,是违反规则的。他们希望看到你到目前为止所尝试的内容,以及一些代码。