Как в RESTful API в Yii2 ограничить доступ к чужим записям?

Всем доброго дня!

Прочитал документацию на оф. сайте Yii2 по RESTful API, пошерстил гугл, но так и не нашёл решения.

Ограничить доступ к редактированию и удалению чужих записей можно через переопределение checkAccess, например:
public function checkAccess($action, $model = null, $params = [])
{
    if ($action === 'update' || $action === 'delete') {
        if ($model->createdBy !== \Yii::$app->user->id)
            throw new \yii\web\ForbiddenHttpException(sprintf('You can only %s lease that you\'ve created.', $action));
    }
}


Но при этом ничто не мешает пользователю сформировать запрос вроде GET /api/posts или даже GET /api/posts/1 и просмотреть чужие/ую запись.

Как бы его ограничить, при необходимости добавив условие ->where(['createdBy' => \Yii::$app->user->id])?
  • Вопрос задан
  • 561 просмотр
Решения вопроса 1
qonand
@qonand
Software Engineer
Для определения прав доступа к просмотру записи (/api/posts/1) используйте так же checkAccess.
Для выборки записей доступных пользователей(/api/posts) переопределите в контроллере свойство prepareDataProvider у actionIndex например так:
public function actions()
{
    $actions = parent::actions();
    $actions['index'] = [
        'class' => 'yii\rest\IndexAction',
        'modelClass' => $this->modelClass,
        'checkAccess' => [$this, 'checkAccess'],
        'prepareDataProvider' => function ($action) {
            return new ActiveDataProvider([
                 'query' => MyModel::findByAuthor(Yii::$app->user->id);
            ]);
        }
    ]
    return $actions;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Есть хорошее видео, где всё рассказано.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы