Sonata Admin: cómo redireccionar un usuario según su rol

Escenario

Una aplicación symfony 4.4 con el framework Sonata Admin 3.78.1 cuenta con una página de login para que los administradores del sitio puedan gestionar sus clientes. Ahora queremos que los clientes puedan usar la misma página de login para acceder a sus datos personales como, por ejemplo, sus facturas. Para la gestión de usuarios la aplicación utiliza los paquetes friendsofsymfony/user-bundle 2.1.2 y sonata-project/user-bundle 4.9.0

Problema

En config/packages/security.yaml se puede configurar el comportamiento de la aplicación tras un login exitoso, en el bloque de firewall. La clave default_target_path está definida con la ruta del panel de control para que el usuario autenticado sea dirigido a esa página. Al principio cambié la ruta con la de un controlador en /admin/default que, según el rol del usuario dirigía a un sitio u otro: Además añadí el rol ROLE_CUSTOMER y un par de reglas en security.yaml para permitir el acceso no autenticado a la ruta del controlador, y a los clientes del rol ROLE_CUSTOMER a sus páginas: Esta solución funciona para redireccionar un cliente a su página después de autenticarse. Pero si accede a la página de login estando ya autenticado era dirigido a la página del panel de control con el esperado error de acceso denegado.

Solución

El problema es que por defecto la acción de Sonata Admin (definida en Sonata\UserBundle\Action\LoginAction es dirigir al usuario a la ruta sonata_admin_dashboard. Una manera de solucionarlo es declarar esa ruta en config/routes.yaml para que dirija al controlador de antes que comprueba el rol del usuario:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *