我正在开发一个包含博客在内的多个内容的网站,而且我对质量分配保护提出了一些疑问。
当我在博客文章上发表评论时,我认为可以填写'字段将是评论的正文,文章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()
但在这种情况下,不需要任何可填写的'字段,因为这种方式不会产生任何质量分配异常。
我知道大规模分配应该通过帖子请求来防止恶意数据更改,但我不能真正得到,例如,任何人如何修改第2行中的author_id,因为它来自Auth而不是来自输入。
答案 0 :(得分:1)
我认为在这种情况下,您可以使用new ArticleComment($request->input())
或$comment->fill($request->input())
分配用户可输入的数据,然后分配ID或非用户可编辑数据(在您的情况下,{{1分开。
author_id
这会阻止用户使用author_id作为字段发布表单,但仍允许您快速分配用户字段,而无需在需要的任何位置列出它们。
答案 1 :(得分:0)
在您的示例中,没有人能够修改它。但是,如果你想分配这样的东西呢?
while (taskList.Count > 0)
{
Task.WaitAny();
// Gets tasks in RanToCompletion or Faulted state
var finishedTasks = GetFinishedTasks(taskList);
foreach (Task<string> finishedTask in finishedTasks)
{
Console.WriteLine(finishedTask.Result);
taskList.Remove(finishedTask);
}
}
现在可以修改字段 。这就是Mass Assignement旨在防范的。