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:

Publicaciones Similares

  • Modelos locales

    Llevaba tiempo queriendo correr uno de esos modelos generativos en mi propia máquina. Libre de otras prioridades, hoy por fin he tenido ocasión de comprobar si era verdad que modelos de la familia GPT4All o LlamaCpp estaban preparados para ser consumidos en ordenadores personales. De los centenares de proyectos que han proliferado desde el advenimiento…

  • Cómo recuperar ficheros borrados de Amazon Linux

    Escenario Tenemos una aplicación de tipo SpringBoot desplegada en una instancia ec2 de Amazon, con el sistema operativo Amazon Linux. Para sincronizar los cambios con el código desplegado en producción utilizo rsync en este script de bash:

    Ayer cuando desplegué, la aplicación no compilaba en el servidor remoto. Era debido a que una clase…

  • Conector Symfony2 Simple Machines Forum

    Introducción El objetivo de este tutorial es describir una solución para sincronizar la autenticación de symfony2 (sf2) con los foros de Simple Machines Forums (SMF). A día de hoy no hay ningún bundle de foros para symfony listo para producción. CCDNForumForumBundle es lo mejor que he encontrado pero lamentable su desarrollador no lo mantiene ya….

Deja una respuesta

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