Задать вопрос
@DarkByte2015

Как сделать защиту от несанкционированного редактирования?

Есть некоторый контроллер редактирования статей. Как мне сделать чтобы юзер не мог редактировать (и даже просматривать) чужие статьи? Причем я не хочу проверку писать в каждом методе. Их очень много. Мне надо как-то проверить до вызова экшэна имеет ли юзер доступ к статье или нет. Можно конечно проверять в beforeAction, вот только что проверять?? Например есть метод actionDeleteFile который удаляет файл статьи. Но я не передаю в него id статьи, ибо зачем? Этому методу достаточно знать id файла.

Так что сейчас у меня как-бы любой юзер может менять чужие статьи. Это не есть хорошо.

P.S. Единственным решением я вижу пока что прокидывать все-таки в каждый экшн даже там где это не требует id статьи, а в beforeAction выдернуть как-нибудь этот id из урла и если юзер не имеет права на редактирование - послать его на три буквы. :D
  • Вопрос задан
  • 249 просмотров
Подписаться 1 Простой Комментировать
Ответ пользователя Максим Тимофеев К ответам на вопрос (2)
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
У Вас есть некий индентификатор автора, допустим author_id
И есть экшен в котором запрашивается статья. Кто мешает добавить в условие
-andWhere(['author_id'=>Yii::$app->user->id])
Например:
public function actionView($id){
    if($model = Article::find()
                        ->andWhere(['author_id'=>Yii::$app->user->id])
                        ->andWhere(['id'=>$id])
                        ->one()){
       return $this->render('view',['model'=>$model])
    }
    throw new ForbiddenHttpExceptionn('Ты сюда не ходи, снег башка попадет');
}
Ответ написан