Laravel: restringir acceso según rol de usuario

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.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario