我的应用程序显示了项目列表、项目详细信息页面以及用于编辑这些项目的表单。这些是路线:
- / - 项目列表
- /project/42 - 查看项目(项目详细信息页面)
- /project/42/edit - 编辑项目
只有其所有者才能编辑项目。
我已经实现了一个投票者来阻止非所有者访问 /project/42/edit 。
现在,我还想从项目详细信息页面隐藏“编辑项目”链接。该怎么做呢?理想情况下,在 Twig 中,我想做类似的事情
{% if may_access(path('project_edit', { 'id': project.id })) %}
<a href="{{ path('project_edit', { 'id': project.id }) }}">edit project</a>
{% endif %}
我可以将此功能实现为 Twig 扩展,但也许类似的功能已经存在。
函数 is_granted() 实际上有第二个参数这让我可以做我需要做的事情:
{% if is_granted("MAY_EDIT", project) %}
<a href="{{ path('project_edit', { 'id': project.id }) }}">edit project</a>
{% endif %}
我将其与控制器操作中的检查结合使用:
public function editAction(Project $project)
{
if (!$this->get('security.context')->isGranted('MAY_EDIT', $project)) {
$this->flash('You are not allowed to edit this project');
return $this->show($project);
}
// ...
}
这实际上与方法非常相似nifr在他的回答中使用Sonata 用户 - 自定义字段的安全性。我希望找到一种方法来自动调用投票者并避免调用 isGranted()。
如果你想看一下完整的代码,它在我的教程项目中发布于 github.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)