From 00767382b5d77acfd86ae363e110adace683ab26 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Thu, 29 Jan 2026 16:15:28 -0500 Subject: [PATCH] up --- .../Commands/ScanResourcesPermissions.php | 24 ++++--- scripts/check_proveedores.php | 33 ++++++++++ scripts/rename_proveedors.php | 66 +++++++++++++++++++ 3 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 scripts/check_proveedores.php create mode 100644 scripts/rename_proveedors.php diff --git a/app/Console/Commands/ScanResourcesPermissions.php b/app/Console/Commands/ScanResourcesPermissions.php index 46fa5c6..89ee71a 100644 --- a/app/Console/Commands/ScanResourcesPermissions.php +++ b/app/Console/Commands/ScanResourcesPermissions.php @@ -43,19 +43,27 @@ class ScanResourcesPermissions extends Command $filename = pathinfo($file->getFilename(), PATHINFO_FILENAME); $className = 'App\\Filament\\Resources\\' . $filename; - // Intentar obtener un label legible: preferimos el método getNavigationLabel(), luego la propiedad estática + // Intentar obtener un label legible: preferimos el método getPluralModelLabel(), luego getNavigationLabel(), luego la propiedad estática $label = null; + $pluralLabel = null; + if (class_exists($className)) { - if (method_exists($className, 'getNavigationLabel')) { - $label = $className::getNavigationLabel(); - } elseif (isset($className::$navigationLabel)) { - $label = $className::$navigationLabel; + if (method_exists($className, 'getPluralModelLabel')) { + $pluralLabel = $className::getPluralModelLabel(); + } + + if (! $pluralLabel && method_exists($className, 'getNavigationLabel')) { + $pluralLabel = $className::getNavigationLabel(); + } + + if (! $pluralLabel && isset($className::$navigationLabel)) { + $pluralLabel = $className::$navigationLabel; } } - // Si no hay label, usar el nombre del archivo sin extensión ni sufijo Resource - if ($label) { - $base = Str::lower($label); + // Si no hay label plural, usar el nombre del archivo sin sufijo Resource + if ($pluralLabel) { + $base = Str::lower($pluralLabel); } else { $base = Str::lower(Str::replaceLast('Resource', '', $filename)); } diff --git a/scripts/check_proveedores.php b/scripts/check_proveedores.php new file mode 100644 index 0000000..7a59684 --- /dev/null +++ b/scripts/check_proveedores.php @@ -0,0 +1,33 @@ +make(Illuminate\Contracts\Console\Kernel::class); +$kernel->bootstrap(); + +use Spatie\Permission\Models\Permission; +use Spatie\Permission\Models\Role; +use App\Models\User; + +$perms = Permission::where('name', 'like', 'ver prov%')->pluck('name')->toArray(); +print "Permisos que empiezan con 'ver prov':\n"; +print_r($perms); + +// Verificar rol y usuario +$role = Role::where('name', 'Administrador')->first(); +print "\nPermisos del rol Administrador (filtrados por prov):\n"; +if ($role) { + print_r($role->permissions->pluck('name')->filter(fn($n)=>str_contains($n,'prov'))->toArray()); +} else { + print "Rol Administrador no encontrado\n"; +} + +$user = User::where('email', 'info@creacionesheidivers.com')->first(); +if ($user) { + print "\nUsuario: {$user->email}\nRoles: " . implode(', ', $user->getRoleNames()->toArray()) . "\n"; + print "Usuario puede 'ver proveedores'?: " . ($user->can('ver proveedores') ? 'si' : 'no') . "\n"; + print "Usuario tiene permisos relacionados con 'prov':\n"; + $userPerms = array_filter($user->getAllPermissions()->pluck('name')->toArray(), fn($n)=>str_contains($n,'prov')); + print_r($userPerms); +} else { + print "\nUsuario info@creacionesheidivers.com no encontrado\n"; +} diff --git a/scripts/rename_proveedors.php b/scripts/rename_proveedors.php new file mode 100644 index 0000000..2a1bc07 --- /dev/null +++ b/scripts/rename_proveedors.php @@ -0,0 +1,66 @@ +make(Illuminate\Contracts\Console\Kernel::class); +$kernel->bootstrap(); + +use Spatie\Permission\Models\Permission; +use Spatie\Permission\Models\Role; +use App\Models\User; + +echo "Buscando permisos mal formados 'proveedors'...\n"; +$old = Permission::where('name', 'like', '%proveedors%')->get(); +if ($old->isEmpty()) { + echo "No se encontraron permisos con 'proveedors'.\n"; + exit(0); +} + +foreach ($old as $perm) { + $newName = str_replace('proveedors', 'proveedores', $perm->name); + + $new = Permission::firstOrCreate(['name' => $newName]); + + // Re-asignar a roles que tenían el permiso antiguo + $roles = $perm->roles; + foreach ($roles as $role) { + $role->givePermissionTo($new); + $role->revokePermissionTo($perm); + echo "Rol '{$role->name}': reemplazado '{$perm->name}' por '{$newName}'\n"; + } + + // Re-asignar a usuarios que tenían el permiso antiguo (a través de direct assign) + $users = $perm->users ?? null; // spatie relationship may not be set on model depending on config + if ($users) { + foreach ($users as $user) { + $user->givePermissionTo($new); + $user->revokePermissionTo($perm); + echo "Usuario '{$user->email}': reemplazado permiso '{$perm->name}' por '{$newName}'\n"; + } + } + + // Finalmente eliminar el permiso antiguo + $perm->delete(); + echo "Permiso antiguo '{$perm->name}' eliminado.\n"; +} + +// Asegurar que el rol Administrador tenga el permiso nuevo +$role = Role::firstWhere('name', 'Administrador'); +if ($role) { + if (! $role->hasPermissionTo('ver proveedores')) { + $role->givePermissionTo('ver proveedores'); + echo "Rol 'Administrador' ahora tiene 'ver proveedores'.\n"; + } +} + +// Asegurar que el usuario tenga el permiso +$user = User::where('email', 'info@creacionesheidivers.com')->first(); +if ($user) { + $has = $user->can('ver proveedores'); + echo "Usuario '{$user->email}' puede 'ver proveedores'?: " . ($has ? 'si' : 'no') . "\n"; + if (! $has) { + $user->givePermissionTo('ver proveedores'); + echo "Asignado permiso 'ver proveedores' al usuario.\n"; + } +} + +echo "Listo.\n"; \ No newline at end of file