【发布时间】:2018-04-04 15:41:52
【问题描述】:
在 Laravel 中,我有 projects 表。一个项目可以是另一个项目的子项目。我将这个parent-child 关系保留在同一个projects 表中。
编辑项目时,用户从选择框中选择父项目。但是我想阻止用户选择正在编辑的同一个项目;作为父项目。这会导致循环,从而导致错误。
我怎样才能做到这一点?我能想到的最佳解决方案是编写自定义验证规则,但是,在这种情况下,如何获取 id 属性来检查 project_id 字段?或者除了验证器之外还有更好的解决方案吗?
我知道我可以在选择框中排除该项目,但这不是正确的解决方案,以防有人篡改发布数据并修改 project_id 值(将其设置为正在编辑的项目的相同值),无限循环将发生。
更新: 这是我的父项目输入生成代码:
<div class="form-group">
{{ Form::label('project_id', 'Parent Project:') }}
{{ Form::select('project_id', [null => null] + Project::lists('name', 'id'), null, ['class' => 'form-control']) }}
</div>
如上所述,“在选择框中不包括当前项目 ID”不是一个合适的解决方案。该应用程序仍然存在漏洞。应该以更恰当的方式加以预防。
【问题讨论】:
-
老实说,我只是在选择框中禁用它。最直接的方法。您还介意发布一些代码吗?比如为什么 project_id 应该包含自己,如果它应该只包含父母?
-
这是一个编辑表单。它不仅包含父母。编辑表单中的选择框包含所有项目,因此用户可以将父项目更改为当前项目中的任何一个。