He seguido la receta 'Cómo cargar usuarios de seguridad de la base de datos (el proveedor de entidades)' del libro de recetas de Symfony2 (http://symfony.com /doc/current/cookbook/security/entity_provider.html), excepto que no estoy usando el proveedor de entidad personalizada, lo que significa que mi clase de usuario está utilizando la carga diferida para los roles.Symfony2 roles/groups - is_granted no detecta los roles que el usuario tiene
El firewall/control de acceso en la seguridad funciona bien. Tengo algunas rutas a las que solo pueden acceder los usuarios de ROLE_ADMIN y algunas a las que pueden acceder los usuarios de ROLE_USER; funcionan bien.
El problema es que en mi plantilla base, tengo una barra que se muestra como:
<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>
Aunque mi usuario tiene la función ROLE_ADMIN en la base de datos (y puede tener acceso a las direcciones URL que están restringidos a esa función), el enlace "Área de administración" no se muestra.
De la misma forma, tengo unas pocas cosas:
<p>Roles: {% for role in app.user.roles %}{{ role.name }} [{{ role.role }}]{% if not loop.last %}, {% endif %}{% endfor %}</p>
Trabaja muy bien! ¡Todos los roles que tiene el usuario se muestran!
¿Qué estoy haciendo mal?
¿Es la carga lenta la culpable?
No está causando problemas en ningún otro lado.
Entonces, ¿qué sucede cuando cargas con entusiasmo los roles en tu proveedor de usuario? – Cerad