shopit-back/app/Domains/Administrator/documentacion
ncoronel 18f1217daa feat(admin): implement CRUD for administrators with role management and tenant restrictions 2026-09-04 10:28:33 -03:00
..
README.md feat(admin): implement CRUD for administrators with role management and tenant restrictions 2026-09-04 10:28:33 -03:00

README.md

Administradores de AdminApp

CRUD de usuarios con rol adminapp, limitado al tenant del usuario autenticado. Todos los administradores del tenant pueden gestionar esta sección.

Endpoints

Base: /api/v1/adminapp/tenant/administrators. Requieren auth:sanctum y adminapp.tenant.

  • GET /: listado ordenado por nombre; acepta search por nombre, DNI o email.
  • POST /: alta; responde 201 con data.
  • PUT /{administrator}: actualización de los tres campos; responde 200 con data.
  • DELETE /{administrator}: baja lógica; responde 204.

Alta y actualización reciben:

{
  "nombre_apellido": "Ada Lovelace",
  "dni": "12345678",
  "email": "ada@example.test"
}

Nombre (hasta 255 caracteres), DNI (hasta 50) y email (hasta 255) son obligatorios. El email se normaliza a minúsculas antes de validar y debe ser único entre usuarios activos, sin importar su tenant o rol. Se permite reutilizar el email de un usuario eliminado. Rol y tenant no son editables desde esta API.

Las respuestas incluyen id, nombre_apellido, dni, email, rol_codigo y role (codigo, nombre). Nunca incluyen contraseña ni datos de escaneo.

Alta y acceso

Se genera una contraseña aleatoria y un intento de establecimiento de contraseña con motivo administrator_created, reutilizando createForAdminAppEmail. El evento usa el canal adminapp; el listener existente envía el email después del commit mediante la cola emails. Requiere la configuración de correo, dominio AdminApp y worker existentes. No se envían contraseñas en texto plano.

Eliminación y aislamiento

Las consultas de usuarios se limitan por tenant y rol adminapp. IDs ajenos, usuarios eliminados y usuarios de otros roles devuelven 404. La validación de campos devuelve 422; falta de autenticación, 401, y rol no autorizado, 403.

No se permite eliminar al propio usuario ni dejar al tenant sin administradores (422, error administrator). La eliminación bloquea la fila del tenant dentro de una transacción para serializar bajas concurrentes. También verifica que el actor siga activo, revoca tokens y aplica el borrado lógico existente en users.

No agrega tablas ni migraciones. No modifica el CRUD de escáneres ni el frontend.

Verificación

php artisan test tests/Feature/Administrator/AdministratorControllerTest.php

Las pruebas cubren CRUD, normalización y unicidad del email, establecimiento de contraseña, restricciones de rol y tenant, baja lógica, tokens y protecciones de eliminación. El caso de petición autenticada antes de la baja del actor se simula; no es una prueba con conexiones concurrentes reales.