Страница 1 из 1

[РЕШЕНО] Как разрешить пользовалю смотреть/редактировать только свои статьи?

Добавлено: 2020.08.15, 11:26
Boglik
С помощью GRUD создал экшен, виды, модули.
Пользователь может создавать посты, редактировать их, смотреть и удалять.

Как запретить пользователю просматривать, редактировать и удалять посты, которые ему не принадлежат?
Достаточно перейти по ссылке 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 }  ?>
Администратору кнопка показывает, пользователю, которому не test - кнопка не показывается. Пишу user - кнопка видна.

Но я не могу понять, что написать, что сделать, чтобы пользовать не мог видеть, редактировать, удалять чужие заметки?

К примеру экшен в контроллере, отвечающий за обновление. Пользователю 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,
            ]);
        }
    }

Re: Как разрешить пользовалю смотреть/редактировать только свои статьи?

Добавлено: 2020.08.15, 19:36
samdark
Но я не могу понять, что написать, что сделать, чтобы пользовать не мог видеть, редактировать, удалять чужие заметки?
За это отвечает RBAC Rule. Почитайте по ним мануал. При вызове can() передаёте данные, в rule делаете проверку.