refactor(audit): 分离架构-监听器计算装饰器入库

This commit is contained in:
DXC
2026-04-20 14:41:40 +08:00
parent 9a0982e76d
commit 1c8def7e6f
2 changed files with 57 additions and 210 deletions

View File

@ -301,23 +301,24 @@ def audit_log(module: str, action: str = None, get_target_id_fn=None, get_target
# 默认:记录请求 Payload
details = {'payload': filtered_payload}
# ★ 关键:检查是否已被底层监听器处理
# 如果底层已生成高级日志changes/deleted_snapshot则跳过简单的 payload 日志
from flask import g, has_request_context
if has_request_context() and hasattr(g, 'audit_handled_ids') and g.audit_handled_ids:
# 构建检查 key: "module:target_id"
# ★ 核心重构:监听器计算,装饰器入库
# 检查 g.audit_details 是否有底层监听器传递的高级日志
if has_request_context() and hasattr(g, 'audit_details') and g.audit_details:
check_key = f"{module}:{target_id}" if target_id else None
if check_key and check_key in g.audit_handled_ids:
# 底层已处理,跳过装饰器日志
current_app.logger.info(f'[审计] 底层监听器已处理 {check_key},跳过装饰器')
return response
# 也检查 target_name 是否匹配
for key in g.audit_handled_ids:
if target_name and target_name in key:
current_app.logger.info(f'[审计] 底层监听器已处理 {key},跳过装饰器')
return response
if check_key and check_key in g.audit_details:
# 底层的高级日志(changes/deleted_snapshot/created)替换 payload
audit_info = g.audit_details[check_key]
details = audit_info.get('details', details)
current_app.logger.info(f'[审计] 底层监听器已计算 {check_key},使用高级日志')
else:
# 兼容 fallback模糊匹配 target_name
for key, audit_info in g.audit_details.items():
if target_name and target_name in key:
details = audit_info.get('details', details)
current_app.logger.info(f'[审计] 底层监听器已计算 {key},使用高级日志')
break
# 保存日志
# 保存日志(统一入库)
log_entry = AuditLog(
user_id=user_id,
username=username,