【发布时间】:2015-11-06 07:24:20
【问题描述】:
更新:似乎不是 twig 缓存,但 twig 直到几分钟后才识别新添加的角色(在生产模式下)。
我在 Symfony2 应用程序中有一个 twig 模板,它可以像这样检查用户的角色:
{% if is_granted('ROLE_PLATINUM_MEMBER') %}
<span>YOU ARE A PLATINUM MEMBER</span>
{% elseif is_granted('ROLE_MEMBER') %}
<span>YOU ARE A NORMAL MEMBER</span>
{% endif %}
从 PayPal 退货(支付成功)后角色升级。
但是,twig 仍然显示YOU ARE A NORMAL MEMBER(仅在生产模式下)。
如果用户注销并重新登录,则会显示正确的角色。
这让我认为它是树枝缓存。我认为这不是 Symfony,因为如果我导航到包含与上述相同代码的页面(在转到 PayPal 之前我没有访问过),那么会显示 YOU ARE A PLATINUM MEMBER。
我看过at this answer for flushing the twig cache,但是设置:
twig:
cache: false
对生产模式不利。
有没有办法以编程方式刷新它?
我找到了this flush command,但不完全确定它是否是我需要的。
也许我需要使用一些代码来获取用户并检查角色,而不仅仅是检查角色?
【问题讨论】:
-
我认为这与树枝缓存无关。尝试重新加载用户。是的,关闭树枝缓存不是一个好主意。
-
如果不是 twig 的东西,那么我不知道为什么我之前没有在去 paypal 之前加载的 twig 模板显示正确的提升
ROLE! -
它与Twig无关,当你为用户添加角色时,你可以在安全内容中刷新用户:$this->get('security.context')->getToken()->setUser($用户);
-
似乎不起作用,在角色更改之前(从贝宝返回之前)加载的树枝模板仍然显示“普通会员”
-
还有一件事要尝试:
$this->get('session')->migrate();