La autenticación basada en roles es un mecanismo de autorización para aplicaciones Laravel. En este tutorial de autenticación basada en roles de Laravel, veremos cómo realizar la autorización basada en roles en Laravel desde cero. Este ejemplo de autenticación basada en roles de Laravel 8 creará diferentes paneles de administración para administrador y superadministrador para la autorización de Laravel basada en roles. En esta autenticación basada en roles en Laravel, crearemos middleware para controlar el acceso de los usuarios. A veces necesitamos crear un panel de administración creando sistemas de autenticación o inicio de sesión basados en roles en Laravel. Antes de comenzar con la autenticación y autorización basada en roles en Laravel, comprendamos qué es la autorización basada en roles y qué podemos lograr con esto. Imaginemos que estamos creando una aplicación que utilizarán una variedad de clientes. Sin embargo, algunas partes de la aplicación solo deben ser accesibles para clientes que tengan un determinado privilegio. Aquí es donde entra en escena un sistema de autenticación basado en roles. Tenemos que crear algunas tablas adicionales en su base de datos para definir todos los roles en su aplicación y asignar a nuestros usuarios a ciertos roles. Paso 1: crear un proyecto de Laravel Primero, cree o descargue un proyecto de Laravel nuevo para crear la autorización de Laravel. Paso 2: Crear middleware Ahora, debe crear middleware para controlar el acceso de los usuarios escribiendo el siguiente comando: php artisan make:middleware CheckRole Paso 3: Crear controladores Creemos dos nuevos controladores, AdminController y SuperAdminController. php artisan make:controller AdminController php artisan make:controller SuperAdminController A continuación, agregue el método de índice al controlador //Método de índice para el controlador de administración public function index() { return view(‘admin.home’); } //Método de índice para la función pública del controlador SuperAdmin index() { return view(‘superadmin.home’); } El método de índice de AdminController devuelve la página de inicio de la carpeta de administración y el método de índice de SuperAdmin Controller devuelve la página de inicio que se encuentra en la carpeta de vista de superadministrador. Paso 4: Crear vistas Cree una nueva carpeta admin en recursos > vistas y agregue un nuevo archivo home.blade.php @extends(‘layouts.app’) @section(‘content’)
@if (sesión(‘estado’))
@endif Este es el Panel de administración. ¡Debes tener el privilegio de estar aquí!
@endsection A continuación, cree una nueva carpeta superadmin en recursos > vistas y agregue un nuevo archivo home.blade.php @extends(‘layouts.app’) @section(‘content’)
@if (sesión(‘estado’))
@endif Este es el Panel de administración. ¡Debes ser un súper privilegiado de estar aquí!
@endsection Agregue una entrada de ruta al archivo route/web.php Route::get(‘/admin’, ‘AdminController@index’); Route::get(‘/superadmin’, ‘SuperAdminController@index’) Paso 5: Crear el modelo de rol y configurar la migración: php artisan make: model Role -m El comando anterior creará una clase de modelo para la tabla de roles y también cree un archivo de migraciones en base de datos> migraciones Edite la clase CreateRolesTable en la carpeta de migraciones incrementos(‘identificación’); $tabla->cadena(‘nombre’); $tabla->cadena(‘descripción’); $tabla->marcas de tiempo(); }); } /** * Invertir las migraciones. * * @return void */ public function down() { Schema::dropIfExists(‘roles’); } } Paso 6: Crear migración para la tabla role_user: Necesitamos otra tabla que contenga los datos de qué rol está asignado a qué usuario. php artisan make:migration create_role_user_table Edite la clase CreateRoleUserTable en la carpeta de migraciones: incrementos(‘identificación’); $table->integer(‘role_id’)->unsigned(); $table->integer(‘user_id’)->unsigned(); $tabla->marcas de tiempo(); }); } /** * Invertir las migraciones. * * @return void */ public function down() { Schema::dropIfExists(‘role_user’); } } A continuación, debemos proporcionar una relación de muchos a muchos entre el usuario y el rol. Agregue el método roles() a su clase User.php public function roles() { return $this ->belongsToMany(‘App\Role’) – >conMarcas de tiempo(); } Agregue usuarios() a su clase Role.php función pública usuarios() { return $this ->belongsToMany(‘App\User’) ->withTimestamps(); } Paso 7: Cree tablas y agregue datos para realizar pruebas: Ahora puede ejecutar el comando migrar para crear las tablas en la base de datos. php artisan migrar Al ejecutar el comando Migrar se crean las siguientes tablas en su base de datos. Puede optar por completar los datos para la prueba manualmente o mediante siembra. MigrationsPassword_resetsRolesRole_userusers Hemos creado dos Roles con el nombre ROLE_ADMIN y ROLE_SUPERADMIN. Los usuarios asignados al rol de ROLE_ADMIN deben tener acceso a la sección de administración de la aplicación. Lo mismo se aplica a los usuarios superadministradores. Rol AdminSuper Admin Puede registrar un nuevo usuario ingresando a la URL /register; después de haber agregado algunos usuarios, puede asignar roles a los usuarios en la tabla role_user. He asignado algunos roles de muestra al usuario. Sólo unos pocos pasos más, ¡no te rindas! Paso 8: Modificar User.php: Abra user.php y agregue estos pequeños métodos que se utilizarán para verificar si el usuario tiene uno o varios roles en particular. función pública AuthorizeRoles($roles) { if ($this->hasAnyRole($roles)) { return true; } abort(401, ‘Esta acción no está autorizada.’); } función pública tieneAnyRole($roles) { if (is_array($roles)) { foreach ($roles como $role) { if ($this->hasRole($roles)) { return true; } } } else { if ($this->hasRole($roles)) { return true; } } falso retorno; } función pública tieneRole($rol) { if ($this->roles()->where(‘nombre’, $rol)->first()) { return true; } falso retorno; } Con los métodos anteriores, si desea comparar solo un rol, puede utilizar el método hasRole. O puede comparar múltiples roles pasando una matriz al método AuthorizeRoles. Actualmente, solo buscamos comparar con un único rol. Usaremos el método hasRole. Sigamos adelante y creemos el Middleware para lo mismo. Paso 9: Crear middleware: ahora crearemos un nuevo CheckRole de middleware. php artisan make:middleware CheckRole Modifique el archivo CheckRole.php en aplicación > Middleware usuario()->hasRole($rol)) { abort(401, ‘Esta acción no está autorizada.’); } devolver $siguiente($solicitud); } } Hemos modificado el middleware del método de manejo para verificar un rol determinado. El siguiente paso es registrar el middleware que acabamos de crear. Abra Kernal.php que se encuentra en Aplicación > y modifique la matriz $routeMiddleware para incluir el rol middleware. protegido $rutaMiddleware = [
‘auth’ => \Illuminate\Auth\Middleware\Authenticate::class,
‘auth.basic’ => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
‘bindings’ => \Illuminate\Routing\Middleware\SubstituteBindings::class,
‘can’ => \Illuminate\Auth\Middleware\Authorize::class,
‘guest’ => \App\Http\Middleware\RedirectIfAuthenticated::class,
‘throttle’ => \Illuminate\Routing\Middleware\ThrottleRequests::class,
‘role’ => \App\Http\Middleware\CheckRole::class,
]; Paso 10: Modificar controladores: abra AdminController.php. El siguiente código en el método constructor verificará si el usuario que inició sesión tiene el rol ROLE_ADMIN asociado. función pública __construct() { $this->middleware(‘auth’); $this->middleware(‘rol:ROLE_ADMIN’); } Repita los mismos pasos para SuperAdminController.php. función pública __construct() { $this->middleware(‘auth’); $this->middleware(‘rol:ROLE_SUPERADMIN’); } ¡Eso es todo! Sólo los usuarios privilegiados pueden acceder a determinadas partes de su aplicación. Hasta ahora, era demasiada codificación y lectura. Ahora, sólo los usuarios privilegiados podrán acceder a esa parte de las aplicaciones. Es decir, tendrá control total sobre qué usuarios tendrán cuánto acceso a una aplicación basada en Laravel. ¿Busca servicios de desarrollo de aplicaciones de Laravel? ¿Necesita actualizar la aplicación Laravel existente? Puede ponerse en contacto con Avya Tech, una empresa confiable de desarrollo web de Laravel, para cualquier ayuda relacionada con la aplicación Laravel.
Source link
Deja una respuesta