我正在使用Symfony 2.7并使用is_granted('...')
在自定义404
错误页面上使用时会引发异常。
我知道因为Symfony 2.1路由在安全性之前完成了:
防火墙侦听器现在在路由器侦听器之后注册。 这意味着特定的防火墙URL(如/ login_check和/ logout) 现在必须在路由配置中定义适当的路由。 此外,如果您有自定义404错误页面,请确保不这样做 使用任何与安全相关的功能,例如is_granted。
请参阅:https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#security
因此is_granted('...')
单独将无效。但是,在许多不同的主题中讨论的解决方案是首先检查app.user
:
{% extends app.user and is_granted('ROLE_USER') ? 'AppBundle::private.html.twig' : 'AppBundle::public.html.twig' %}
{% if app.user and is_granted('...') %} ...
instead of
{% extends is_granted('ROLE_USER') ? 'AppBundle::private.html.twig' : 'AppBundle::public.html.twig' %}
{% if is_granted('...') %} ...
但这正是我已经做过的事情。
虽然此检查在所有公共网页上都正常(例如mypage.xy/notexisting
),但对于用户区域内的所有网页(用户已登录,例如mypage.xy/user/notexisting
),该检查将失败
有什么区别,如何让所有页面都运行此代码?