我遵循了 Symfony2 烹饪书 (http://symfony.com/doc/current/cookbook/security/entity_provider.html) 中的“如何从数据库(实体提供程序)加载安全用户”配方,除了我是不使用自定义实体提供程序 - 这意味着我的 User 类正在为角色使用延迟加载。
安全中的防火墙/访问控制一切正常。我有一些只有 ROLE_ADMIN 用户可以访问的路由和一些 ROLE_USER 用户可以访问的路由 - 这些工作正常。
问题是在我的基本模板中,我有一个显示如下的栏:
<p>Logged in as: {{ app.user.username }} {% if is_granted('ROLE_ADMIN') %}| <a href="{{ path('bassettprovidentia_skeleton_admindashboard') }}">Admin area</a> {% endif %}| <a href="#">Settings</a> | <a href="{{ path('bassettprovidentia_skeleton_logout') }}">Log out</a></p>
即使我的用户在数据库中具有 ROLE_ADMIN 角色(并且可以访问仅限于该角色的 URL),“管理区域”链接也不会显示!
以同样的形式,我有这个:
<p>Roles: {% for role in app.user.roles %}{{ role.name }} [{{ role.role }}]{% if not loop.last %}, {% endif %}{% endfor %}</p>
它工作正常!显示用户拥有的所有角色!
我究竟做错了什么?
延迟加载是罪魁祸首吗?
它不会在其他地方引起问题。