feat: auditoría (audit_log en SQLite, endpoint /api/audit y pantalla /admin/auditoria)
Registra sesiones, creaciones y modificaciones en SAP (solo nombres de campos), denegados y cambios de permisos. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4e9d6a757d
commit
fe8c080471
26 files changed
+993
-28
No files matched your search
@@ -0,0 +1,32 @@
|
||||
/** Hechos que registra la auditoría. */
|
||||
export type AuditAction =
|
||||
| 'login'
|
||||
| 'login_failed'
|
||||
| 'logout'
|
||||
| 'sl_create'
|
||||
| 'sl_update'
|
||||
| 'sl_denied'
|
||||
| 'permissions_set'
|
||||
| 'permissions_remove';
|
||||
|
||||
export type AuditOutcome = 'ok' | 'error' | 'denied';
|
||||
|
||||
/** Una fila del registro de auditoría (`GET /api/audit`). */
|
||||
export interface AuditRow {
|
||||
id: number;
|
||||
/** Momento (ISO 8601, UTC). */
|
||||
ts: string;
|
||||
webUser: string | null;
|
||||
action: string;
|
||||
resource: string | null;
|
||||
key: string | null;
|
||||
outcome: string;
|
||||
ip: string | null;
|
||||
/** Nombres de los campos tocados, motivo o mensaje de error; nunca valores. */
|
||||
detail: Record<string, unknown> | null;
|
||||
}
|
||||
|
||||
export interface AuditListResponse {
|
||||
total: number;
|
||||
rows: AuditRow[];
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
export * from './audit.js';
|
||||
export * from './auth.js';
|
||||
export * from './permissions.js';
|
||||
export * from './sl.js';
|
||||
|
||||
@@ -68,7 +68,10 @@ export const MENU: readonly MenuModule[] = [
|
||||
id: 'admin',
|
||||
label: 'Administración',
|
||||
// Solo acceso total ("*"): el API de permisos exige ser administrador.
|
||||
items: [{ path: '/admin/permisos', label: 'Permisos de menú' }],
|
||||
items: [
|
||||
{ path: '/admin/permisos', label: 'Permisos de menú' },
|
||||
{ path: '/admin/auditoria', label: 'Auditoría' },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
Reference in new issue
Block a user