⚙️ 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)
🧾 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-permissionpara proyectos grandes. - Revisa siempre la autorización antes de mostrar acciones críticas en el frontend.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias