2012-04-17 24 views
11

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.

+1

Entonces, ¿qué sucede cuando cargas con entusiasmo los roles en tu proveedor de usuario? – Cerad

Respuesta

18

Bien - Encontré la respuesta. No puedo creer lo obvio que fue.

Las funciones de usuario tomadas del objeto app.user (es decir, el segundo fragmento) obviamente se toman de la base de datos cuando las solicito.

La llamada is_granted() obviamente utiliza la sesión para ver qué funciones tiene un usuario. Había estado jugando y cambiando de roles mientras olvidé cerrar la sesión y volver a entrar; no me extraña que ciertos roles no aparezcan.

Después de iniciar o cerrar sesión y jugar con diferentes roles, puedo confirmar que todo funciona bien.

Si no hubiera tomado un descanso y volviera esta mañana, podría haber estado persiguiéndome en círculos durante horas; hay una lección que aprender allí.

+0

¡Me salvaste el día, gracias! – Moonchild

+0

Tenga en cuenta que esto funciona igual para el control de acceso y los firewalls en la configuración y dentro de los controladores. –

+0

Gracias hombre! Este tema es demasiado estúpido para ser honesto, y no pude entender por qué está sucediendo durante 30 minutos ... – Cowwando

Cuestiones relacionadas