Files
Neo-ZQYY/docs/prd/Neo_Specs/review-audit/P10-NS4-04.md
Neo 6f8f12314f feat: 累积功能变更 — 聊天集成、租户管理、小程序更新、ETL 增强、迁移脚本
包含多个会话的累积代码变更:
- backend: AI 聊天服务、触发器调度、认证增强、WebSocket、调度器最小间隔
- admin-web: ETL 状态页、任务管理、调度配置、登录优化
- miniprogram: 看板页面、聊天集成、UI 组件、导航更新
- etl: DWS 新任务(finance_area_daily/board_cache)、连接器增强
- tenant-admin: 项目初始化
- db: 19 个迁移脚本(etl_feiqiu 11 + zqyy_app 8)
- packages/shared: 枚举和工具函数更新
- tools: 数据库工具、报表生成、健康检查
- docs: PRD/架构/部署/合约文档更新

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 00:03:48 +08:00

5.2 KiB
Raw Permalink Blame History

P10-NS4-04操作日志/审计日志的查看界面

简要结论

  • 状态: 未解决
  • 项目当前没有业务操作审计日志的数据库表、后端记录逻辑、以及前端查看界面。仅有 Excel 上传记录(biz.excel_upload_log)和 ETL 任务执行日志admin-web LogViewer均不属于业务操作审计日志范畴。

详细审查

数据库端

查库方式pg-app-test MCP 连接不可用,改用 DDL 迁移文件搜索。

检查项 结果
audit_log / operation_log / activity_log 不存在DDL 搜索无匹配)
auth schema 中日志相关表 不存在(仅有 userstenant_adminsuser_rolesuser_site_rolesuser_applicationsuser_assistant_binding
biz schema 中日志相关表 ⚠️ 仅有 biz.excel_upload_logExcel 上传批次记录,非操作审计日志)
task_execution_log 存在于 _archived/ 基线中,属于 ETL 任务执行日志,非业务操作审计

结论:数据库中不存在通用的业务操作审计日志表。biz.excel_upload_log 记录的是 Excel 上传批次状态pending/confirmed/failed不记录"谁做了什么操作"这类审计信息。

后端代码

检查项 结果
apps/backend/app/routers/ 中审计日志路由 不存在(无 audit/log/activity 相关路由文件)
审计中间件 / 日志记录装饰器 不存在(app/middleware/ 仅有 response_wrapper.pypermission.py
tenant_users.py 审核操作日志 审核通过/拒绝仅更新状态字段(user_applications.statusreviewed_byreviewed_at),不写入独立审计日志表
tenant_clues.py 线索操作日志 编辑/删除/隐藏操作直接修改数据,无审计记录
tenant_excel.py 上传操作日志 ⚠️ 写入 biz.excel_upload_log,但仅记录批次元数据,不记录操作人的具体行为

关键发现

  • 用户审核(通过/拒绝):user_applications 表有 reviewed_by + reviewed_at 字段,可追溯审核人和时间,但不是独立的审计日志
  • 用户编辑(状态变更/绑定修改):无任何操作记录
  • 维客线索修改/删除/隐藏:无任何操作记录,且删除为物理删除(DELETE FROM),数据不可恢复
  • Excel 上传:excel_upload_log 记录了 uploaded_by,但无确认操作的审计

前端代码

检查项 结果
apps/tenant-admin/src/pages/ 中日志查看页面 不存在(仅有 Login、UserApproval、UserManagement、ExcelUpload、RetentionClues 五个页面)
apps/tenant-admin/src/App.tsx 路由配置 无日志相关路由(路由:/login/applications/users/excel/clues
apps/admin-web/src/pages/LogViewer.tsx ⚠️ 存在,但功能是 ETL 任务执行日志查看器(通过 WebSocket 接收执行日志、按任务分组展示),不是业务操作审计日志
apps/admin-web/src/App.tsx 路由 /log-viewer 指向 ETL LogViewer与业务操作审计无关

结论:两个前端应用均无业务操作审计日志查看界面。

差距分析

P10 标杆文件要求管理后台具备操作审计功能,即"谁在什么时间做了什么操作"的完整追溯能力。当前 NS4 的差距:

维度 P10 要求 NS4 现状 差距
审计数据存储 独立审计日志表 不存在 完全缺失
审计记录写入 关键操作自动记录 无中间件/装饰器 完全缺失
审计日志查看 管理后台可查看/筛选 无页面 完全缺失
操作可追溯性 所有关键操作可追溯 ⚠️ 仅审核操作有 reviewed_by/reviewed_at 大部分缺失
数据安全 删除操作可恢复/可审计 线索删除为物理删除 高风险

建议

短期(高优先级)

  1. 新建审计日志表 biz.audit_log

    • 字段:idsite_idoperator_id(操作人)、operator_typetenant_admin/systemactionapprove/reject/edit/delete/hide/upload 等)、target_typeuser/clue/excel 等)、target_iddetailJSONB变更前后值ip_addresscreated_at
    • 索引:(site_id, created_at DESC)(operator_id)(target_type, target_id)
  2. 后端审计中间件/工具函数

    • tenant_users.py 的审核通过/拒绝、用户编辑/禁用操作中写入审计日志
    • tenant_clues.py 的编辑/删除/隐藏操作中写入审计日志
    • tenant_excel.py 的上传确认操作中写入审计日志
    • 建议实现为可复用的 log_audit() 工具函数,在事务内调用
  3. 线索删除改为软删除:当前 DELETE FROM public.member_retention_clue 为物理删除,建议改为 SET is_deleted = true,配合审计日志记录

中期

  1. 前端审计日志查看页面tenant-admin

    • 新增 /audit-logs 路由和 AuditLogs 页面
    • 支持按时间范围、操作类型、操作人筛选
    • 展示操作详情(变更前后对比)
  2. 后端审计日志查询 API

    • GET /api/tenant/audit-logs(分页 + 筛选)