⚙️ Roles y permisos básicos

⚙️ Roles y permisos básicos

Gestiona la autorización en tu aplicación

Laravel permite manejar roles y permisos de manera sencilla usando **Gate**, **Policies** o paquetes externos como **Spatie/laravel-permission**. En esta lección aprenderás cómo definir roles, asignarlos a usuarios y controlar el acceso a rutas y acciones.

📌 Conceptos básicos

  • Roles: representan categorías de usuarios (Admin, Editor, Usuario).
  • Permisos: acciones que un usuario puede realizar (crear post, eliminar comentario, ver panel).
  • Autorización: control de acceso a funcionalidades según rol o permiso.

⚙️ Definir roles y permisos en el código

Podemos usar un paquete como Spatie/laravel-permission o hacerlo manualmente con migraciones y relaciones. Ejemplo de migración para roles y permisos:


// Migración para roles
Schema::create('roles', function (Blueprint $table) {
    $table->id();
    $table->string('name')->unique();
    $table->timestamps();
});

// Migración para permisos
Schema::create('permissions', function (Blueprint $table) {
    $table->id();
    $table->string('name')->unique();
    $table->timestamps();
});

// Tabla pivot usuario-rol
Schema::create('role_user', function (Blueprint $table) {
    $table->foreignId('user_id')->constrained()->onDelete('cascade');
    $table->foreignId('role_id')->constrained()->onDelete('cascade');
    $table->primary(['user_id', 'role_id']);
});
  

🧾 Asignar roles a usuarios (visual)

@csrf

🧾 Asignar roles a usuarios (código)


public function assignRole(Request $request)
{
    $request->validate([
        'user' => 'required|exists:users,id',
        'role' => 'required|exists:roles,name'
    ]);

    $user = User::find($request->user);
    $user->roles()->syncWithoutDetaching([$request->role]);

    return back()->with('success', 'Rol asignado correctamente');
}
  

🧠 Control de acceso en rutas

Puedes proteger rutas según rol usando middleware personalizado:


// Middleware: CheckRole.php
public function handle($request, Closure $next, $role)
{
    if (! $request->user() || ! $request->user()->hasRole($role)) {
        abort(403, 'Acceso no autorizado');
    }

    return $next($request);
}

// Uso en web.php
Route::get('/admin', function() {
    return 'Panel de administración';
})->middleware('checkRole:admin');
  
Consejo: Mantén roles y permisos claros y simples para evitar problemas de seguridad.

📚 En resumen:

  • Define roles y permisos claros para tu aplicación.
  • Usa middleware para controlar acceso a rutas.
  • Asigna roles a usuarios de forma segura y validada.
  • Considera usar paquetes como Spatie/laravel-permission para proyectos grandes.
  • Revisa siempre la autorización antes de mostrar acciones críticas en el frontend.

Publicar un comentario

0 Comentarios