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

  • |

    Cómo ampliar el espacio en disco en 1and1

    Escenario Hemos contratado un servidor dedicado en 1and1 (ubuntu 14.04) y al acceder por ssh constatamos que no disponemos de todo el espacio en disco disponible: $ df -hFilesystem Size Used Avail Use% Mounted onudev 3.9G 4.0K 3.9G 1% /devtmpfs 798M 592K 797M 1% /run/dev/md1 4.0G 990M 3.0G 25% /none 4.0K 0 4.0K 0% /sys/fs/cgroupnone 5.0M 0 5.0M 0% /run/locknone 3.9G 0 3.9G 0% /run/shmnone 100M 0 100M 0% /run/user/dev/mapper/vg00-usr 4.8G 1.3G 3.3G 28% /usr/dev/mapper/vg00-var 4.8G 812M 3.8G 18% /var/dev/mapper/vg00-home 4.8G 10M 4.6G 1% /home Objetivo Aumentar el espacio disponible para dar cabida a nuestros recursos. Solución Nota: sólo aplicable a sistemas linux Primer paso Comprobamos el espacio en disco real: ~$ sudo fdisk -lDisk /dev/sda: 240.1 GB, 240057409536 bytes255 heads, 63 sectors/track, 29185 cylinders, total 468862128 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytesDisk identifier: 0x24e3fc12   Device Boot      Start         End      Blocks   Id  System/dev/sda1            2048     8390655     4194304   fd  Linux raid autodetect/dev/sda2         8390656    12584959     2097152   82  Linux swap / Solaris/dev/sda3        12584960   468862127   228138584   fd  Linux raid autodetect Segundo…

Deja una respuesta

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