En el post te hoy te enseñaré a manejar algunos roles de usuario en Laravel para que se pueda acceder a ciertas áreas dependiendo del rol.
Con lo que aprenderás podrás restringir ciertos módulos solo al administrador, y otros solo para el usuario normal, cajero, empleado, etcétera. Vamos a usar controladores y middlewares.
Por cierto, con esto vamos a restringir controladores completos, y no acciones. Eso lo dejamos para otro post en donde seguramente usaremos los Requests y el método authorize
.
Agregando el rol de usuario
Primero debes hacer una migración para agregar el campo a la base de datos, modificar el modelo en sus fillables
, etcétera.
Eso no lo explicaré en este post, aquí supondré que ya sabes recuperar el usuario con su rol.
Luego puedes obtener el rol del usuario que inició sesión con Auth::user()->rol
(suponiendo que rol
es el campo del rol).
Creando middleware
Nota: si esto cambia en una actualización de Laravel simplemente sigue los pasos de la documentación para crear uno.
El siguiente paso es crear un middleware de Laravel que va a restringir el acceso en caso de que el rol del usuario no sea el de administrador (o el rol que tú quieras).
Ejecutamos php artisan make:middleware SoloUsuarioAdministrador
Eso creará un archivo llamado SoloUsuarioAdministrador
dentro de app/Http/Middleware
.
En su método handle
verificamos si el rol es administrador. En caso de que sí, dejamos que la petición se cumpla invocando a $next
pasándole el $request
.
En caso contrario, lo redireccionamos hacia atrás (con redirect()->back()
) y le indicamos con un mensaje. Recuerda que tú puedes manejarlo como prefieras; podrías simplemente regresar un mensaje, redireccionar a otra página, etcétera.
Finalmente en app/Http/Kernel.php
dentro de $routeMiddleware
indicamos nuestro middleware al final. Yo le puse el nombre solo_usuario_administrador
.
No olvides importarlo con use App\Http\Middleware\SoloUsuarioAdministrador;
al inicio.
Hasta el momento solo tenemos el middleware creado, falta aplicarlo.
Aplicando middleware para verificar rol de usuario con Laravel
Ya tenemos el middleware y el rol del usuario, ahora solo hay que aplicarlo a las rutas que creamos necesarias.
Con Laravel podemos agrupar rutas y eso es justamente lo que haremos. En mi caso tengo algunos módulos que puede ver cualquier usuario autenticado, y otros que solo puede ver el administrador.
Por ejemplo, desde la línea 23 hasta la 34 definimos las rutas públicas a la que cualquier usuario puede acceder incluso sin estar logueado; son rutas que no necesitan rol.
Luego desde la línea 36 hasta la 43 defino los controladores y resources a los que solo los usuarios autenticados tendrán acceso.
Y finalmente en la línea 45 hasta la 47 estoy indicando las rutas a las que se podrá acceder solo si el usuario autenticado es administrador, aplicando el middleware auth
además del solo_usuario_administrador
.
Conclusión
Aunque parezca algo tardado, no lo es. Laravel ofrece varias maneras de comprobar la autenticación de usuarios y sus roles.
Con lo que hicimos podremos agregar más rutas y protegerlas o separarlas agregando los middleware necesarios para controlar el acceso a los módulos dependiendo del rol del usuario con Laravel.
Para finalizar te dejo con más tutoriales de Laravel y PHP en mi blog.
0 Comentarios