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

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
Boglik
Сообщения: 42
Зарегистрирован: 2018.10.16, 04:49

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

Сообщение 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,
            ]);
        }
    }
Последний раз редактировалось Boglik 2020.08.17, 21:48, всего редактировалось 1 раз.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

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

Сообщение samdark »

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