Пользователь может создавать посты, редактировать их, смотреть и удалять.
Как запретить пользователю просматривать, редактировать и удалять посты, которые ему не принадлежат?
Достаточно перейти по ссылке http://site.loc/post/view?id=20 и перебрать http://site.loc/post/view?id=19, http://site.loc/post/view?id=18 и тд, чтобы натворить делов.
Рассматривал 2 варианта - органичение доступа с помощью RBAC и экшены.
С тем и с тем возникли вопросы. Помогите их решить. Вот на чем я остановился.
RBAC
Создал таблицы, установил правила.
Для проверки сделал такое:
Код: Выделить всё
<?php if(Yii::$app->user->can('admin')|| Yii::$app->user->can('test')){?>
<?= Html::a('Обновить информацию', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
<?php } ?>
Но я не могу понять, что написать, что сделать, чтобы пользовать не мог видеть, редактировать, удалять чужие заметки?
К примеру экшен в контроллере, отвечающий за обновление. Пользователю user - показывает все, но если поменять на "123" - белая страница.
Я возможно где-то не дочитал или пропустил, если есть конкретный пример, укажите пожалуйста.
Код: Выделить всё
public function actionUpdate($id)
{
if (\Yii::$app->user->can('user', ['post' => $post])) {
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->render('update', [
'model' => $model,
]);
}
}