Middleware + Roles en Laravel 5.6

Lo primero que se necesita es tener una aplicación nueva de Laravel (última versión disponible 5.6) corriendo y correctamente configurada.

En segundo lugar, tener (si se quiere) un sistema de autenticación con roles. Puedes leer mi post anterior sobre autenticación de usuarios y roles en laravel.


Qué es un Middleware

Los Middleware proveen un mecanismo eficiente para el filtro de peticiones HTTP que ingresen a tu aplicación. Por ejemplo, Laravel incluye un middleware que permite verificar si un usuario está autentificado cuando acceda a tu aplicación. Si el usuario no lo estuviera, el middleware lo redireccionaría a la pantalla de login. Y por el contrario, si lo estuviera, el middleware permitiría el acceso a la aplicación.

Creación de un middleware

Con tu aplicación de laravel correctamente instalada y creado el sistema por defecto para autenticaciones (más info), se requiere generar el middleware.

Para este caso, en que seguiremos la utilización de roles, crearemos el middleware con el siguiente comando:

php artisan make:middleware CheckRole

Definir el Middleware

Ahora necesitas editar el middleware CheckRole para que genere la restricción o filtro que desees:

public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
return redirect('home');

}
return $next($request);
}

Hemos agregado una redirección estándar a la ruta “home”, pero en esta línea podrás agregar lo que desees. Por ejemplo:

// opción 1
abort(403, “No tienes autorización para ingresar.”);
// Opción 2
return redirect(‘home’);

Registrar el Middleware

Una vez creado el middleware, debemos registrarlo en el archivo app/Http/Kernel.php.

Existen varias opciones para el registro, Globales, por Grupos o para asignación de middleware a una ruta. En este caso utilizaremos la última opción por lo que debemos encontrar la variable $routeMiddleware y adicionar lo siguiente:

‘role’ => \App\Http\Middleware\CheckRole::class,

Esta línea inclúyela tal como se muestra acá abajo:

/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'role' => \App\Http\Middleware\CheckRole::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];

Agregar el Middleware en la ruta

Una vez que el middleware ha sido definido en el HTTP kernel, tu puedes utilizar el método y asignar éste a una ruta de la siguiente forma:

Route::put('post/{id}', function ($id) {
//
})->middleware('auth', 'role:admin');

En este caso hemos agregado un middleware a la ruta con dos restricciones. La primera asegura que tu usuario debe estar registrado para acceder y la segunda condición es que tu usuario tenga rol de administrador.

Recuerda que esta definición de rol fue creada como ejemplo en mi artículo anterior “Autenticación de Usuarios y Roles en Laravel”.


Like what you read? Give Claudio Vallejo a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.