Как показать записи, созданные этими пользователями на странице индекса в yii2?
Я использую базовый и внедренный RBAC yii2.
У меня есть две роли: администратор и fieldofficer, и я создал разрешения и правила и назначил пользователей. Теперь, когда администратор входит в систему, на странице индекса он должен видеть все записи, а также созданные им записи в сетке.
Принимая во внимание, что когда fieldofficer входит в систему, он должен видеть только свои созданные записи на странице индекса.
Как это сделать?
1 ответ
Вам необходимо предварительно загрузить идентификатор пользователя в поисковую модель. Если проблема безопасности (то есть: вы не хотите, чтобы другой пользователь мог обойти это, несмотря ни на что), вам нужно будет определить, был ли передан идентификатор пользователя в запрос, и принудительно вернуть его пользователю. Вы хотите (то есть: тот, который вошел в систему). В большинстве ситуаций вам понадобится дополнительная безопасность, и вам следует.
замещать 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,
]);
}
Кроме того, вы должны опубликовать код при публикации в Stackru, если вы не хотите получить кучу голосов "за". Просто задавать вопросы, это против правил. Они хотят увидеть, что вы уже пробовали, и какой-то код, чтобы пройти.