Entrega 3 - Modulo de Administracion y Configuracion
Resumen
Implementa el modulo completo de administracion y configuracion con CRUD de roles, gestion de permisos, categorias de instancias y categorias de recordatorios, todo restringido al rol ADMINISTRADOR con auditoria en cada operacion.
Cambios principales
Roles y permisos
- CRUD completo en
/api/v1/admin/rolescon validacion, auditoria y baja logica. - Nueva entidad
Permissiony tabla intermediarole_permissionspara asociar permisos a un rol de forma dinamica. - Endpoint dedicado
PUT /api/v1/admin/roles/{id}/permissionspara reemplazar el conjunto de permisos en una sola operacion. - Seed de los roles base de la entrega (ADMINISTRADOR, DOCENTE, TUTOR, ESTUDIANTE) mediante migracion idempotente.
Categorias
- CRUD de categorias de instancias en
/api/v1/admin/instance-categoriescon seed inicial. - CRUD de categorias de recordatorios sobre el modulo existente (
/api/v1/recordatorios/categorias), agregando campocode, timestamps y@PreAuthorizepara admin.
Seguridad
-
@EnableMethodSecurityactivado. - Matcher dedicado
/api/v1/admin/**restringido a ADMINISTRADOR. -
AuthenticationEntryPointyAccessDeniedHandlerglobales que devuelvenApiErrorResponsecon timestamp ISO 8601. -
@PreAuthorize("hasRole('ADMINISTRADOR')")por controller.
Auditoria
- Nuevas acciones en
AuditActionpara roles, permisos y categorias. -
auditService.log(...)en cada operacion con actor, entityId, details y IP desdeX-Forwarded-For.
Exception handler
- Handlers para
AccessDeniedException(403),HttpMessageNotReadableException(400) yMethodArgumentTypeMismatchException(400). - Excepciones especificas para cada caso de no encontrado o duplicado.
Migraciones
-
V17: seed de roles base. -
V18: tablaspermissionsyrole_permissions. -
V19: tablainstance_categoriescon seed. -
V20: extension dereminder_categoriesconcodey timestamps. -
V21: normalizacion del hash del admin aadmin/admin123. -
V22: inclusion deREACTIVATEen el CHECK deinstances_audit.
Bug fixes preexistentes cerrados
-
CedulaUyValidatorrechaza separadores en extremos de la cedula. -
AuditLogEntity.userpasa a fetch EAGER para evitarLazyInitializationExceptionen auditoria. -
GlobalExceptionHandlerTest.shouldHandleResponseStatusExceptioncorregido para que el body pase la validacion. -
PATCH /api/v1/instances/{id}/reactivateahora persiste la accionREACTIVATEeninstances_audit. -
IncidentNotFoundExceptionreemplazaEntityNotFoundExceptionpara devolver 404 en lugar de 500. -
RoleServiceImpl.reemplazarPermisosusadeleteByRoleIdcon flush antes de reasignar para evitarduplicate key. -
ReminderSecurityIntegrationTestyInstanceIntegrationTestlimpian datos cruzados para que la suite completa corra sin errores de FK.
Pruebas
- 155 tests, 0 failures, 0 errors. BUILD SUCCESS.
- 15 tests nuevos para los endpoints admin.
- Pruebas manuales con
curlvalidadas: login, CRUD completo de cada modulo, casos negativos (401, 403, 400, 404, 409) y captura de IP en auditoria. - 63 entradas de auditoria registradas en un escenario E2E completo, con 19 acciones distintas y
entity_nameconsistente.
Checklist
-
Compila sin warnings -
Tests pasan -
Pruebas manuales con curl verificadas -
Auditoria persiste actor, entityId, details e IP -
Endpoints admin restringidos a ADMINISTRADOR -
Migraciones idempotentes donde aplica -
No se introdujeron regresiones en modulos existentes