Я разрабатываю веб-сайт с различным содержанием, включая блог, и у меня возникли некоторые сомнения относительно защиты от массового назначения.
Когда я публикую комментарий к статье в блоге, я предполагаю, что поля «заполняемые» будут содержать тело комментария, идентификатор статьи и parent_comment_id (необязательный и используется только для ответов на комментарий), но когда я дошел до
ArticleComment::create([
'author_id' => Auth::user()->id,
'body' => $request->input('body'),
'article_id' => $request->input('article_id'),
'parent_comment_id' => $request->input('parent_comment_id')
]);
Я обнаружил, что даже поле author_id должно быть массово назначаемым, чтобы оно сохранялось в базе данных (и не вызывало сбой внешнего ключа). Единственной альтернативой, которую я нашел, было бы собрать комментарий из нового экземпляра и сохранить его:
$comment = new App\ArticleComment();
$comment->author_id = Auth::user()->id;
$comment->body = $request->input('body');
$comment->article_id = $request->input('article_id');
$comment->parent_comment_id = $request->input('parent_comment_id');
$comment->save()
но в этом случае не было бы необходимости иметь какое-либо «заполняемое» поле, потому что этот способ не генерирует никаких исключений массового назначения.
Я знаю, что массовое назначение должно предотвратить злонамеренное изменение данных через почтовый запрос, но я действительно не понимаю, например, как кто-то может изменить author_id в строке 2, поскольку он исходит от Auth, а не от ввода.