(Laravel)关于Mass Assignment保护的疑问

(Laravel) Doubts concerning Mass Assignment protection

我正在开发一个包含多个内容的网站,包括一个博客,我对批量分配保护有一些疑问。

当我 post 对博客文章发表评论时,我想 'fillable' 字段将是评论的正文、文章 ID 和 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()

但在这种情况下,不需要任何 'fillable' 字段,因为这种方式不会产生任何批量分配异常。

我知道批量分配应该可以防止通过 post 请求恶意更改数据,但我真的不明白,例如,有人会如何修改行中的 author_id 2 因为它来自 Auth 而不是来自输入。

在你的例子中,没有人能够修改它。但是,如果你想分配这样的东西怎么办?

ArticleComment::create($request->all());

现在可以修改字段。这就是 Mass Assignment 旨在防止的情况。

我认为在这种情况下,您可以使用 new ArticleComment($request->input())$comment->fill($request->input()) 分配用户可输入的数据,然后分配 ID 或非用户可编辑的数据(在您的情况下,author_id) 分开。

$comment = new App\ArticleComment($request->input());
$comment->author_id = Auth::user()->id;
$comment->save()

这将阻止用户使用 author_id 作为字段发布表单,但仍然允许您快速分配用户字段,而不必在需要的地方列出它们。