refactor: cambiar creación de permisos a firstOrCreate y ajustar sincronización de permisos en roles

This commit is contained in:
Juan Felipe Zapata Moreno 2026-01-30 14:55:00 -06:00
parent c5d8e3c65b
commit 95154f4b28

View File

@ -30,19 +30,7 @@ class RoleSeeder extends Seeder
public function run(): void
{
// Limpiar tablas de permisos para poder re-ejecutar
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
DB::table('role_has_permissions')->truncate();
DB::table('model_has_permissions')->truncate();
DB::table('model_has_roles')->truncate();
DB::table('permissions')->truncate();
DB::table('roles')->truncate();
DB::table('permission_types')->truncate();
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
$users = PermissionType::create([
$users = PermissionType::firstOrCreate([
'name' => 'Usuarios'
]);
@ -56,7 +44,7 @@ public function run(): void
$userSettings = $this->onPermission('users.settings', 'Configuración de usuarios', $users, 'api');
$userOnline = $this->onPermission('users.online', 'Usuarios en linea', $users, 'api');
$roles = PermissionType::create([
$roles = PermissionType::firstOrCreate([
'name' => 'Roles'
]);
@ -67,13 +55,13 @@ public function run(): void
$roleDestroy
] = $this->onCRUD('roles', $roles, 'api');
$pulse = PermissionType::create([
$pulse = PermissionType::firstOrCreate([
'name' => 'Sistema'
]);
$systemPulse = $this->onPermission('pulse', 'Monitoreo de Pulse', $pulse, 'api');
$pulse = PermissionType::create([
$pulse = PermissionType::firstOrCreate([
'name' => 'Historial de actividades'
]);
@ -86,7 +74,7 @@ public function run(): void
// ==================== NUEVOS PERMISOS PARA PDV ====================
// Permisos de Caja
$cashRegisterType = PermissionType::create([
$cashRegisterType = PermissionType::firstOrCreate([
'name' => 'Caja registradora'
]);
@ -96,7 +84,7 @@ public function run(): void
$cashRegisterCurrent = $this->onPermission('cash-registers.current', 'Ver caja actual', $cashRegisterType, 'api');
// Permisos de Ventas
$salesType = PermissionType::create([
$salesType = PermissionType::firstOrCreate([
'name' => 'Ventas'
]);
@ -105,7 +93,7 @@ public function run(): void
$salesCancel = $this->onPermission('sales.cancel', 'Cancelar venta', $salesType, 'api');
// Permisos de Inventario (solo lectura)
$inventoryType = PermissionType::create([
$inventoryType = PermissionType::firstOrCreate([
'name' => 'Inventario'
]);
@ -118,7 +106,7 @@ public function run(): void
// Permisos de Clientes
$clientsType = PermissionType::create([
$clientsType = PermissionType::firstOrCreate([
'name' => 'Clientes'
]);
@ -130,7 +118,7 @@ public function run(): void
] = $this->onCRUD('clients', $clientsType, 'api');
// Permisos de Niveles de Clientes (Tiers)
$clientTiersType = PermissionType::create([
$clientTiersType = PermissionType::firstOrCreate([
'name' => 'Niveles de clientes'
]);
@ -145,18 +133,18 @@ public function run(): void
// ==================== ROLES ====================
// Desarrollador
Role::create([
Role::firstOrCreate([
'name' => 'developer',
'description' => 'Desarrollador',
'guard_name' => 'api'
])->givePermissionTo(Permission::all());
])->syncPermissions(Permission::all());
// Administrador
Role::create([
Role::firstOrCreate([
'name' => 'admin',
'description' => 'Administrador',
'guard_name' => 'api'
])->givePermissionTo(
])->syncPermissions(
$userIndex,
$userCreate,
$userEdit,
@ -193,11 +181,11 @@ public function run(): void
);
//Operador PDV (solo permisos de operación de caja y ventas)
Role::create([
Role::firstOrCreate([
'name' => 'operador_pdv',
'description' => 'Operador de Punto de Venta',
'guard_name' => 'api'
])->givePermissionTo(
])->syncPermissions(
// Caja
$cashRegisterIndex, // Ver historial de cajas
$cashRegisterOpen, // Abrir caja