Security Symfony安全和细枝渲染功能

Security Symfony安全和细枝渲染功能,security,symfony,routes,twig,render,Security,Symfony,Routes,Twig,Render,我有这种情况。 我的网站有一个安全的部分。我认为安全配置是正确的。 如果我试图从浏览器中打开一个安全的URL,系统会要求我键入用户名和密码。 Symfony profiler在登录后正确显示用户上下文 主页(根路由)不安全(探查器在此显示匿名上下文) 现在的问题是: 如果,在主页的小树枝模板中,我放了这样的东西 {{ render(path('secured_route')) }} 安全路由的内容已呈现! 我希望得到某种异常或登录窗口! 这是一个bug还是我遗漏了什么?以这种方式呈现控制器时,

我有这种情况。 我的网站有一个安全的部分。我认为安全配置是正确的。 如果我试图从浏览器中打开一个安全的URL,系统会要求我键入用户名和密码。 Symfony profiler在登录后正确显示用户上下文 主页(根路由)不安全(探查器在此显示匿名上下文)

现在的问题是: 如果,在主页的小树枝模板中,我放了这样的东西

{{ render(path('secured_route')) }}
安全路由的内容已呈现! 我希望得到某种异常或登录窗口!
这是一个bug还是我遗漏了什么?

以这种方式呈现控制器时,您绕过了路由器,因此与路由相关的安全性也被绕过

您所能做的最好的事情是使用注释将控制器限制为登录用户:

/**
 * @Security("has_role('IS_AUTHENTICATED_REMEMBERED')")
 */
通过使用twig中的“render”,您将跳过与路由相关的安全检查,如果您不需要在匿名上下文中获取内容,则可以在呈现控制器之前检查twig中的角色,例如:

{% if is_granted('ROLE_USER') %}
  {{ render(path('secured_route')) }}
{% endif %}

因此,每个控制器都应该检查权限。在路由级别管理安全性似乎毫无意义。每个控制器和每个服务方法都需要安全检查。然后不要在视图中使用{render(path('secured_route'))},并从控制器处理安全性