Como cambiar la ruta de Logeo dependiendo del rol?

79 views
Skip to first unread message

Luis Vallejos

unread,
Apr 26, 2023, 10:29:15 PM4/26/23
to symfony-es
Tengo mi Login básico con su controlador por defecto, este manda a /Cliente, pero quisiera saber como hacerle para poder cambiar la dirección dependiendo del rol... o de una condicional.

LoginController
Screenshot_1.png

Formulario:
Screenshot_2.png

DE FUNCIONAR FUNCIONA, LOGEA, PERO TODOS VAN A LA MISMA RUTA.

Saúl Hernández Arellano

unread,
Apr 27, 2023, 12:12:17 PM4/27/23
to symfony-es

Yo lo que hago es crear en un controlador que llamo App (AppController) un action, no se, home (homeAction) por ejemplo.  Ahí redirijo al usuaio.

 Como utilizo la jerarquía de roes lo hago así:

 
  /**
     * @Route("/homepage", name="homepage")
     */
     public function homepageAction()
     {
         $usuario = $this->getUser();  
 
         if(in_array('ROLE_USUARIO', $usuario->getRoles())){
             return $this->redirectToRoute('usuario_index', []);
         }  
 
         if(in_array('ROLE_MODERADOR', $usuario->getRoles())){
             return $this->redirectToRoute('moderador_index', []);
         }
 
         // DEFAULT
         return $this->render('app/index.html.twig', []);
     }



Desconosco si habra una mejor manera de lograrlo, pero funciona.

Saludos.

Julian Rodríguez

unread,
Apr 27, 2023, 2:51:14 PM4/27/23
to symfony-es
Se refiere a manejo de rutas por prefijos?
ejemplo
index->cli
admin/index->adm

Luis Vallejos

unread,
Apr 27, 2023, 10:18:02 PM4/27/23
to symfony-es
No, tengo varios roles (Admin, Gerente, Vendedor), pero como lo tengo hecho, todo lo manda a una vista fija, pero por detras (en el Security) las vistas estan restrigidas y al que van todos, no va vendedor y por eso queria saber como puedo mod lo que tengo para poder redirigir a dif vistas.

Luis Vallejos

unread,
Apr 27, 2023, 10:22:05 PM4/27/23
to symfony-es
Saúl Hernández Arellano, si, pero trate de usar estas herramientas que salieron de generarlos con comandos de Symfony y con esto ando algo perdido.

Screenshot_1.png

Luis Vallejos

unread,
Apr 28, 2023, 3:54:21 AM4/28/23
to symfony-es

Eloy González Andueza

unread,
Apr 28, 2023, 10:09:43 AM4/28/23
to symfo...@googlegroups.com
Hola,


Escuchas ese evento obtienes el usuario y según el ROL del usuario lo rediriges a donde tú quieras.

Un saludo.

--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/symfony-es/c505805c-7ff2-4448-b8f6-d4319797217en%40googlegroups.com.

Julian Rodríguez

unread,
Apr 28, 2023, 12:13:24 PM4/28/23
to symfo...@googlegroups.com
puede agregar prefijos de ruta para roles específicos utilizando los middleware y grupos de rutas.

Cree dos grupos de rutas separados en su archivo routes/web.php para los roles de administrador y usuario. Puede agregar cualquier prefijo de ruta que desee antes de las rutas en cada grupo:

//   Rutas para el rol de administrador
Route::prefix('admin')->middleware(['auth', 'admin'])->group(function () {
    // Agregue aquí todas las rutas para el rol de administrador
});

// Rutas para el rol de usuario
Route::prefix('user')->middleware(['auth', 'user'])->group(function () {
    // Agregue aquí todas las rutas para el rol de usuario
});

Agregue los middleware correspondientes en cada grupo de ruta. En el ejemplo anterior, utilizamos los middleware auth, admin y user. Estos middleware se pueden definir en su archivo app/Http/Kernel.php de la siguiente manera:

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'admin' => \App\Http\Middleware\AdminMiddleware::class,
    'user' => \App\Http\Middleware\UserMiddleware::class,
];


Cree los middleware AdminMiddleware y UserMiddleware en su archivo app/Http/Middleware. Estos middleware pueden verificar si el usuario tiene los roles correspondientes y redirigirlos a una página de inicio de sesión si no están autorizados para acceder a una ruta.

namespace App\Http\Middleware;

use Closure;

class AdminMiddleware
{
    public function handle($request, Closure $next)
    {
        if (auth()->check() && auth()->user()->isAdmin()) {
            return $next($request);
        }
       
        return redirect('/login');
    }
}

class UserMiddleware
{
    public function handle($request, Closure $next)
    {
        if (auth()->check() && auth()->user()->isUser()) {
            return $next($request);
        }
       
        return redirect('/login');
    }
}


En su modelo User, defina los métodos isAdmin() y isUser() que verifican si el usuario tiene los roles correspondientes. Por ejemplo:

class User extends Authenticatable
{
    public function isAdmin()
    {
        return $this->role === 'admin';
    }

    public function isUser()
    {
        return $this->role === 'user';
    }
}

Con estos pasos, puede generar rutas en Laravel con prefijo por roles.
Ahora las rutas en el grupo de ruta admin solo serán accesibles para los usuarios que tengan el rol de administrador, y las rutas en el grupo de ruta user solo serán accesibles para los usuarios que tengan el rol de usuario.

--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es

---
Has recibido este mensaje porque estás suscrito a un tema del grupo "symfony-es" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/symfony-es/BH_lf6Afbec/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/symfony-es/32e3b7b3-13ef-46fa-b1c8-14275e483cbbn%40googlegroups.com.


--

Recuerda sólo imprimir este mensaje si es necesario. En  nuestras manos esta el cuidar el medio ambiente. Recicla y reduce el consumo de hojas

Reply all
Reply to author
Forward
0 new messages