{%if app.user和is_granted(' ...')%}在404页

时间:2016-08-29 14:18:24

标签: symfony routing http-status-code-404

我正在使用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),该检查将失败

有什么区别,如何让所有页面都运行此代码?

0 个答案:

没有答案