No hay script de seed ni flujo de primer arranque. Para crear usuarios hay que entrar como administrador, y para entrar hace falta que ya exista un usuario.
En apps/web/src/app/admin/usuarios/page.tsx el administrador no puede borrarse a sí mismo (línea 133), pero sí puede cambiar su propio rol a cashier. El API tampoco impide quitar o degradar al último administrador.
Qué estamos pagando hoy
Cada instalación nueva requiere insertar el primer usuario a mano en la base de datos, con la contraseña ya hasheada en el formato de password.util.ts (salt:hash con scrypt).
Si el último administrador se cambia a cajero o es borrado por otro admin, nadie puede volver a administrar el sistema sin tocar la base.
Arreglo propuesto
Script npm run seed (o comando de primer arranque) que cree un administrador desde variables de entorno si no existe ninguno
Regla en UserService: no permitir borrar ni degradar al último usuario con rol admin
Deshabilitar en la UI el cambio de rol propio
Documentar el primer arranque en el README
Techo de esta ronda
Seed del primer admin y protección del último admin. Fuera: invitaciones por correo y recuperación de contraseña.
Superficie
API (apps/api)
Módulos
Usuarios, Auth / sesión / roles, API / backend, Base de datos / contrato Prisma
Esfuerzo
S — un PR chico
Riesgo de no tocarlo
Alto (seguridad, datos, o bloquea el próximo corte)
### Qué es la deuda
- No hay script de seed ni flujo de primer arranque. Para crear usuarios hay que entrar como administrador, y para entrar hace falta que ya exista un usuario.
- En `apps/web/src/app/admin/usuarios/page.tsx` el administrador no puede borrarse a sí mismo (línea 133), pero sí puede cambiar su propio rol a `cashier`. El API tampoco impide quitar o degradar al último administrador.
### Qué estamos pagando hoy
- Cada instalación nueva requiere insertar el primer usuario a mano en la base de datos, con la contraseña ya hasheada en el formato de `password.util.ts` (`salt:hash` con scrypt).
- Si el último administrador se cambia a cajero o es borrado por otro admin, nadie puede volver a administrar el sistema sin tocar la base.
### Arreglo propuesto
- [ ] Script `npm run seed` (o comando de primer arranque) que cree un administrador desde variables de entorno si no existe ninguno
- [ ] Regla en `UserService`: no permitir borrar ni degradar al último usuario con rol `admin`
- [ ] Deshabilitar en la UI el cambio de rol propio
- [ ] Documentar el primer arranque en el README
### Techo de esta ronda
Seed del primer admin y protección del último admin. Fuera: invitaciones por correo y recuperación de contraseña.
### Superficie
API (apps/api)
### Módulos
Usuarios, Auth / sesión / roles, API / backend, Base de datos / contrato Prisma
### Esfuerzo
S — un PR chico
### Riesgo de no tocarlo
Alto (seguridad, datos, o bloquea el próximo corte)
Miguel
was assigned by Carlos2026-10-02 20:05:37 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Qué es la deuda
apps/web/src/app/admin/usuarios/page.tsxel administrador no puede borrarse a sí mismo (línea 133), pero sí puede cambiar su propio rol acashier. El API tampoco impide quitar o degradar al último administrador.Qué estamos pagando hoy
password.util.ts(salt:hashcon scrypt).Arreglo propuesto
npm run seed(o comando de primer arranque) que cree un administrador desde variables de entorno si no existe ningunoUserService: no permitir borrar ni degradar al último usuario con roladminTecho de esta ronda
Seed del primer admin y protección del último admin. Fuera: invitaciones por correo y recuperación de contraseña.
Superficie
API (apps/api)
Módulos
Usuarios, Auth / sesión / roles, API / backend, Base de datos / contrato Prisma
Esfuerzo
S — un PR chico
Riesgo de no tocarlo
Alto (seguridad, datos, o bloquea el próximo corte)