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