1
0

refactor(audit): extract audit domain into self-contained module

Move the entire audit subsystem (system audit, API audit, import audit,
user lifecycle audit, frontend telemetry) from core into modules/audit/.

Core decoupling via interface-based injection:
- AuditRecorderInterface replaces SystemAuditService in 10+ core services
- UserLifecycleAuditInterface / ImportAuditInterface for specialized flows
- NullAuditRecorder fallback when audit module is disabled
- ApiBootstrap/ApiResponse use null-safe callable resolvers

Module structure (modules/audit/):
- Manifest with routes, permissions, scheduler jobs, authorization policy
- 9 services, 8 repositories, 6 domain enums, 4 job handlers
- 33 page files, 4 JS files, 8 test files, migration scripts, i18n

Core cleanup:
- OperationsAuthorizationPolicy, UiCapabilityMap, PermissionService
  surgically cleaned of audit-specific constants
- Sidebar template cleared of hardcoded audit navigation
- AuditModuleIsolationContractTest ensures no future core→module coupling

All quality gates pass: 1346 tests (19,276 assertions), PHPStan level 5
clean, architecture contracts verified.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-25 21:12:49 +01:00
parent 12a837bda9
commit 0c351f6aff
176 changed files with 2157 additions and 834 deletions

View File

@@ -0,0 +1,71 @@
{
"Telemetry helps detect recurring UI issues and failed requests in production.": "Telemetry helps detect recurring UI issues and failed requests in production.",
"perm.user_lifecycle_audit.view": "View user lifecycle logs",
"perm.users.lifecycle_restore": "Restore users from lifecycle audit",
"User lifecycle": "User lifecycle",
"Audit": "Audit",
"API audit": "API logs",
"API audit logs": "API logs",
"Purge API audit logs": "Purge API logs",
"Purge entries older than 90 days?": "Purge entries older than 90 days?",
"%d API audit entries purged": "%d API log entries purged",
"API audit entry not found": "API log entry not found",
"View API audit entry": "View API log entry",
"Import audit logs": "Import audit logs",
"Can view import audit logs": "Can view import audit logs",
"Purge import logs": "Purge import logs",
"%d import audit entries purged": "%d import audit entries purged",
"Import audit entry not found": "Import audit entry not found",
"View import audit entry": "View import audit entry",
"User lifecycle policy": "User lifecycle policy",
"User lifecycle defines when inactive users are deactivated or deleted.": "User lifecycle defines when inactive users are deactivated or deleted.",
"System audit controls whether security events are logged and how long they are kept.": "System audit controls whether security events are logged and how long they are kept.",
"Privileged admins are excluded from automatic lifecycle actions": "Privileged admins are excluded from automatic lifecycle actions",
"Run user lifecycle now?": "Run user lifecycle now?",
"Run user lifecycle now": "Run user lifecycle now",
"User lifecycle already running": "User lifecycle already running",
"User lifecycle failed": "User lifecycle failed",
"User lifecycle completed: %d deactivated, %d deleted": "User lifecycle completed: %d deactivated, %d deleted",
"Purge scheduler logs": "Purge scheduler logs",
"Purge run logs older than 90 days?": "Purge run logs older than 90 days?",
"%d scheduler run logs purged": "%d scheduler run logs purged",
"User lifecycle logs": "User lifecycle logs",
"View user lifecycle audit entry": "View user lifecycle audit entry",
"Lifecycle audit entry not found": "Lifecycle audit entry not found",
"Purge user lifecycle logs": "Purge user lifecycle logs",
"Purge entries older than 365 days?": "Purge entries older than 365 days?",
"%d user lifecycle audit entries purged": "%d user lifecycle audit entries purged",
"Lifecycle event": "Lifecycle event",
"Restore this user from lifecycle snapshot?": "Restore this user from lifecycle snapshot?",
"Lifecycle event was already restored": "Lifecycle event was already restored",
"Lifecycle snapshot unavailable": "Lifecycle snapshot unavailable",
"System audit": "System audit",
"System audit logs": "System audit logs",
"View system audit entry": "View system audit entry",
"System audit entry not found": "System audit entry not found",
"Enable system audit log": "Enable system audit log",
"Purge system audit logs": "Purge system audit logs",
"Purge expired system audit entries?": "Purge expired system audit entries?",
"%d system audit entries purged": "%d system audit entries purged",
"Frontend telemetry": "Frontend telemetry",
"Enable frontend telemetry": "Enable frontend telemetry",
"Allowed telemetry events": "Allowed telemetry events",
"Telemetry": "Telemetry",
"Telemetry helps us find UI problems faster.": "Telemetry helps us find UI problems faster.",
"The percentage of users who will have telemetry enabled.": "The percentage of users who will have telemetry enabled.",
"Advanced telemetry options": "Advanced telemetry options",
"setting.system_audit_enabled": "Enable/disable system audit logging",
"setting.system_audit_retention_days": "Retention in days for system audit entries",
"setting.frontend_telemetry_enabled": "Enable/disable secure frontend UX and error telemetry",
"setting.frontend_telemetry_sample_rate": "Sampling rate between 0 and 1 for accepted frontend telemetry events",
"setting.frontend_telemetry_allowed_events": "Allowed frontend telemetry event groups (warn_once, ajax_error)",
"System audit events (24h)": "System audit events (24h)",
"System audit risks (24h)": "System audit risks (24h)",
"Top system audit event types (24h)": "Top system audit event types (24h)",
"Recent system audit risks (24h)": "Recent system audit risks (24h)",
"User lifecycle audit": "User lifecycle audit",
"Lifecycle runs (7d)": "Lifecycle runs (7d)",
"Lifecycle risks (7d)": "Lifecycle risks (7d)",
"Top lifecycle reason codes (7d)": "Top lifecycle reason codes (7d)",
"Recent lifecycle risks (7d)": "Recent lifecycle risks (7d)"
}