0

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

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

而当外勤人员登录时,他应该只能在索引页面中看到他创建的记录。

如何做到这一点?

4

1 回答 1

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 时发布代码。只是问问题,是违反规则的。他们想看看你到目前为止已经尝试过什么,以及一些可以参考的代码。

于 2017-11-09T23:34:29.777 回答