feat(authorization): refactor role management to use RoleCode enum, update migrations, seeders, and tests

This commit is contained in:
2026-07-31 08:32:00 -03:00
parent a087a511e0
commit b7e1332b8c
11 changed files with 82 additions and 151 deletions

View File

@@ -2,6 +2,7 @@
namespace Database\Seeders;
use App\Domains\Authorization\Enums\RoleCode;
use App\Domains\Authorization\Models\Permission;
use App\Domains\Authorization\Models\Role;
use Illuminate\Database\Seeder;
@@ -106,44 +107,17 @@ class AuthorizationSeeder extends Seeder
* @var array<string, array{nombre: string, descripcion: string, permisos: list<string>}>
*/
private const ROLES = [
'admin' => [
RoleCode::Admin->value => [
'nombre' => 'Administrador general',
'descripcion' => 'Administra la plataforma y todos sus tenants.',
'permisos' => [],
],
'adminapp' => [
RoleCode::AdminApp->value => [
'nombre' => 'Administrador de la aplicación',
'descripcion' => 'Accede a los menús administrativos de la aplicación.',
'permisos' => [],
],
'tenant_admin' => [
'nombre' => 'Administrador del tenant',
'descripcion' => 'Administra la operación de su propio tenant.',
'permisos' => [
'tenant.ver',
'tenant.editar',
'usuarios.ver',
'usuarios.gestionar',
'roles.ver',
'catalogo.ver',
'catalogo.gestionar',
'inventario.ver',
'inventario.ajustar',
'pedidos.ver',
'pedidos.gestionar',
'pedidos.cancelar',
'pagos.ver',
'pagos.gestionar',
'tickets.ver',
'tickets.gestionar',
'contenido.gestionar',
'integraciones.ver',
'integraciones.gestionar',
'reportes.ver',
'reportes.exportar',
],
],
'user' => [
RoleCode::User->value => [
'nombre' => 'Usuario',
'descripcion' => 'Cliente final limitado a sus propios datos y operaciones.',
'permisos' => [],
@@ -168,7 +142,7 @@ class AuthorizationSeeder extends Seeder
]
);
$permissionCodes = $code === 'admin'
$permissionCodes = $code === RoleCode::Admin->value
? array_keys(self::PERMISSIONS)
: $attributes['permisos'];

View File

@@ -2,6 +2,7 @@
namespace Database\Seeders;
use App\Domains\Authorization\Enums\RoleCode;
use App\Domains\Authorization\Models\Role;
use App\Domains\Menu\Models\Menu;
use App\Domains\Tenant\Models\Tenant;
@@ -140,11 +141,11 @@ class MenuSeeder extends Seeder
->pluck('code');
Role::query()
->whereIn('codigo', ['admin', 'adminapp'])
->whereIn('codigo', [RoleCode::Admin->value, RoleCode::AdminApp->value])
->each(fn (Role $role) => $role->menus()->sync($allRoleMenuCodes));
Role::query()
->where('codigo', 'user')
->where('codigo', RoleCode::User->value)
->each(fn (Role $role) => $role->menus()->sync($userMenuCodes));
$tenants = Tenant::all();