Я следил за "Как загрузить пользователей безопасности из базы данных (поставщика сущностей)" из книги по приготовлению 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>
Все отлично! Все роли, отображаемые пользователем, отображаются!
Что я делаю неправильно?
Виновата ли ленивая загрузка?
Это не вызывает проблем в другом месте.