feat(audit): rebuild the audit log as a grouped ledger with a drawer

Changes, Sign-ins, Security and All views replace the filter form. Repeats fold into one row,
sign-ins fold per person, day and network, and rows name their targets; events now snapshot
the target's name so deleted ones keep it. The drawer adds the event's facts, the target's
history, what the same person did around it, and one-click scoping. New additive routes:
/audit-log/summary, /sign-ins and /export; retention is editable from the page.
This commit is contained in:
neon
2026-10-16 16:38:08 +00:00
parent e21a92b8a4
commit 096bcea5cf
61 changed files with 28322 additions and 1445 deletions
@@ -1,5 +1,5 @@
{
"totalRoutes": 651,
"totalRoutes": 654,
"byPermission": {
"(none)": 283,
"Permission.ManageMetadataConfig": 38,
@@ -15,7 +15,7 @@
"Permission.DemoRestricted": 6,
"Permission.KoreaderSync": 9,
"Permission.OpdsAccess": 4,
"Permission.ViewAuditLog": 1,
"Permission.ViewAuditLog": 4,
"Permission.ViewUserActivity": 6,
"Permission.LibraryDeleteBooks": 14,
"Permission.LibraryDownload": 4,
@@ -275,6 +275,42 @@
"allowDefault": false,
"useGuards": []
},
{
"file": "server/src/modules/audit/audit.controller.ts",
"className": "AuditController",
"methodName": "getSummary",
"httpMethod": "GET",
"path": "/audit-log/summary",
"permissions": ["Permission.ViewAuditLog"],
"libraryAccess": [],
"isPublic": false,
"allowDefault": false,
"useGuards": []
},
{
"file": "server/src/modules/audit/audit.controller.ts",
"className": "AuditController",
"methodName": "getSignIns",
"httpMethod": "GET",
"path": "/audit-log/sign-ins",
"permissions": ["Permission.ViewAuditLog"],
"libraryAccess": [],
"isPublic": false,
"allowDefault": false,
"useGuards": []
},
{
"file": "server/src/modules/audit/audit.controller.ts",
"className": "AuditController",
"methodName": "exportEvents",
"httpMethod": "GET",
"path": "/audit-log/export",
"permissions": ["Permission.ViewAuditLog"],
"libraryAccess": [],
"isPublic": false,
"allowDefault": false,
"useGuards": []
},
{
"file": "server/src/modules/auth/auth.controller.ts",
"className": "AuthController",