This commit is contained in:
Lizandro Guarnizo
2026-01-29 16:15:28 -05:00
parent d0ab74d3fc
commit 00767382b5
3 changed files with 115 additions and 8 deletions
@@ -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));
}
+33
View File
@@ -0,0 +1,33 @@
<?php
require __DIR__ . '/../vendor/autoload.php';
$app = require_once __DIR__ . '/../bootstrap/app.php';
$kernel = $app->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";
}
+66
View File
@@ -0,0 +1,66 @@
<?php
require __DIR__ . '/../vendor/autoload.php';
$app = require_once __DIR__ . '/../bootstrap/app.php';
$kernel = $app->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";