27 abril, 2025
Implementar un sistema de roles básico en Laravel desde cero
Implementar un sistema de roles básico en Laravel
 
                        Suscríbete a nuestro canal en Youtube
SuscríbirseEn este tutorial te enseñaremos cómo implementar un sistema de roles en un proyecto básico de autenticación en Laravel. Utilizaremos los roles más comunes, como admin y lector, para proteger las rutas y garantizar que solo los usuarios con los permisos adecuados puedan acceder a ciertas secciones de la aplicación.
📝 Tabla de Contenidos:
- Paso 1: Crear el modelo Role, migración y seeder.
- Paso 2: Agregar el campo role_ida la tabla de usuarios.
- Paso 3: Crear el Middleware CheckRole.
- Paso 4: Registrar el Middleware en bootstrap/app.php.
- Paso 5: Asignar un rol a los usuarios al registrarse.
- Paso 6: Proteger las rutas con roles.
- Paso 7: Realizar pruebas.
III.- AGREGAR ROLES
En Laravel, existen varias maneras de agregar roles a los usuarios. Vamos a cubrir tres enfoques principales:
- Role como tipo ENUM en la tabla de usuarios.
- Relación uno a muchos entre useryrole.
- Tabla intermedia userrolepara relaciones muchos a muchos.
En este tutorial, implementaremos la relación uno a muchos entre los modelos User y Role, lo que es más sencillo para un sistema de autenticación básico.
Relación entre User y Role
- 
	User: - id
- name
- password
- active
- role_id
- belongsTo(Role)
 
- 
	Role: - id
- name
- hasMany(User)
 
🛠 Paso 1: Crear el modelo Role, migración y seeder
Primero, necesitamos crear el modelo Role con su migración y seeder.
Comandos:
php artisan make:model Role -m
php artisan make:seeder RoleSeeder
Migración (database/migrations/xxxx_xx_xx_create_roles_table.php):
public function up()
{
    Schema::create('roles', function (Blueprint $table) {
        $table->id();
        $table->string('name'); // Admin, Lector, etc.
        $table->timestamps();
    });
}
Seeder (database/seeders/RoleSeeder.php):
public function run()
{
    \App\Models\Role::create(['name' => 'admin']);
    \App\Models\Role::create(['name' => 'lector']);
}
Ejecuta las migraciones y el seeder:
php artisan migrate
php artisan db:seed --class=RoleSeeder
🛠 Paso 2: Agregar role_id a users
Ahora, agregamos el campo role_id a la tabla users para vincular cada usuario con un rol específico.
Comando:
php artisan make:migration add_role_id_to_users_table --table=users
Migración (database/migrations/xxxx_xx_xx_add_role_id_to_users_table.php):
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->unsignedBigInteger('role_id')->default(2); // Default to 'lector'
        $table->foreign('role_id')->references('id')->on('roles');
    });
}
Ejecuta las migraciones:
php artisan migrate 
🛠 Paso 3: Crear Middleware CheckRole
El siguiente paso es crear un Middleware que verifique el rol del usuario y permita el acceso solo a los usuarios con el rol adecuado.
Comando:
php artisan make:middleware CheckRole 
Middleware (app/Http/Middleware/CheckRole.php):
public function handle(Request $request, Closure $next, ...$roles)
{
    $user = $request->user();
    if (!$user || !in_array($user->role->name, $roles)) {
        abort(403, 'No autorizado');
    }
    return $next($request);
}
🛠 Paso 4: Registrar el Middleware en bootstrap/app.php
Para que Laravel reconozca el Middleware, debemos registrarlo en el archivo app/Http/Kernel.php.
En el archivo Kernel.php:
protected $routeMiddleware = [
    // otros middlewares
    'role' => \App\Http\Middleware\CheckRole::class,
];
🛠 Paso 5: Asignar un Rol al Registrar un Usuario
Ahora, cuando un usuario se registre, asignamos un rol automáticamente. Modificamos el método register en AuthController.
Modificación en AuthController.php:
public function register(Request $request)
{
    $request->validate([
        'name' => 'required',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:8|confirmed',
    ]);
    // Asignar el rol de 'lector' por defecto
    $role = Role::where('name', 'lector')->first();
    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
        'role_id' => $role->id,
    ]);
    Auth::login($user);
    return redirect()->intended('dashboard');
}
🛠 Paso 6: Proteger las Rutas con Roles
Finalmente, protegemos las rutas según el rol del usuario. Usamos el Middleware role.
Ejemplo de rutas protegidas:
Route::get('/admin/dashboard', function () {
    return view('admin.dashboard');
})->middleware(['auth', 'role:admin']);
Route::get('/lector/dashboard', function () {
    return view('lector.dashboard');
})->middleware(['auth', 'role:lector']);
🛠 Paso 7: Test
Para probar que todo funciona correctamente:
- 
	Registra un usuario y verifica que se le asigna el rol correcto. 
- 
	Inicia sesión y verifica que, según el rol, se te redirija a la página correspondiente (admin o lector). 
- 
	Intenta acceder a una ruta protegida por rol para asegurar que solo los usuarios con el rol adecuado puedan acceder. 
Tutorial de Autenticación Básico en Laravel sin paquetes
- Implementacion de un login básico sin paquetes
- Implementacion de un register básico sin paquetes
- Implementacion de roles sin paquetes
Leido 829 veces | 1 usuarios
Descarga del código fuente Laravel de Implementar un sistema de roles básico en Laravel desde cero
Accede al código fuente esencial de nuestra aplicación en formato ZIP ó TXT. Ideal para desarrolladores que desean personalizar o integrar nuestra solución.
Opciones de descarga
- Usuarios Registrados: Inicia sesión para descarga inmediata.
- Nuevos Usuarios: Regístrate y descarga.
 
                         
                 
                 
                             
                             
                            