我正在使用yii2 basic并实现了RBAC。
我有两个角色admin和fieldofficer,并创建了权限和规则以及分配的用户。现在,当管理员登录时,在索引页面上,他应该能够看到所有记录以及他在网格中创建的记录。
当fieldofficer登录时,他应该只能在索引页面中看到他创建的记录。
如何做到这一点?
答案 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时发布代码,除非您想要一堆向下投票。只是问问题,是违反规则的。他们希望看到你到目前为止所尝试的内容,以及一些代码。