v1.10.0
Added
- Audit log — registro completo de eventos de seguridad y administración:
- Nueva tabla
activity_logs(id,user_idnullable con FKON DELETE SET NULL,event,description,ip_address,created_at) con índices encreated_atyuser_id App\Model\ActivityLog— constantes de evento (EVENT_LOGIN_SUCCESS,EVENT_LOGIN_FAILED,EVENT_LOGOUT,EVENT_PASSWORD_CHANGED,EVENT_PASSWORD_RESET,EVENT_USER_CREATED,EVENT_USER_UPDATED,EVENT_USER_DELETED); método estáticolog()(usa singleton DB) y helperlogTo(\mysqli)para inyección en tests;getAll()con LEFT JOIN ausersyCOALESCEpara mostrar "Anónimo" cuandouser_ides NULL; ordenado porcreated_at DESC; sin cachéActivityLogController::index()— guarda conAuthMiddleware::timeout()+AuthMiddleware::admin(); solo GET- Ruta
GET /activity-logsregistrada enroutes/web.php - Vista
views/activity-log/index.php— tabla Bootstrap con DataTables client-side; badges de color por tipo de evento;htmlspecialchars()en todas las celdas public/js/activity-logs-table.js— inicialización DataTables conorderpor fecha descendente ypageLength: 25- Enlace "Activity Log" en nav solo visible para admins (
$_SESSION['is_admin']) - Instrumentación en controllers:
AuthController: login exitoso, login fallido (user_id NULL), logout, reset de contraseña por emailProfileController: cambio de contraseña exitosoUserController: crear, editar y eliminar usuario (con username del objetivo en la descripción)
log()envuelto en try/catch conerror_log()— un fallo de auditoría nunca aborta el flujo principal- IP registrada desde
$_SERVER['REMOTE_ADDR']; nunca X-Forwarded-For - 10 nuevos tests en
tests/Unit/ActivityLogTest.php— cubrelogTo()con/sin user_id, IP presente/ausente, caracteres especiales, acumulación de filas,getAll()vacío, JOIN con nombre, COALESCE "Anónimo" y orden DESC — 50 tests en total
- Nueva tabla
Full Changelog
https://github.com/Jandres25/Encriptacion_PHP/blob/master/CHANGELOG.md