我的应用程序显示了一个项目列表,项目详细信息页面和用于编辑这些项目的表单。这些是路线:
只有其所有者可以编辑项目。
我已经实施了一个选民,以防止对非所有者访问/ 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扩展,但可能已经存在类似的功能。
答案 0 :(得分:11)
函数is_granted()实际上has a second parameter允许我做我需要的事情:
{% 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 User - Security on custom field时使用的方法非常相似。我希望找到一种方法让自动调用选民并避免调用isGranted()。
如果你想看一下完整的代码,那就是我有published in github的教程项目。