[debt] No hay forma de crear el primer administrador ni protección del último #16

Open
opened 2026-10-02 18:47:37 +00:00 by Carlos · 0 comments
Member

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)

### 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 Carlos 2026-10-02 20:05:37 +00:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RynextTechnologies/PDV#16