fix(audit,matchmaker): V057 audit_logs 增加 subject_user_id 主体维度(运行时实测抓到 C 端审计 FK 硬缺陷)

- 根因:audit_logs.operator_id FK→operators,C 端用户(consent/decline/越权)触发的审计把 userId 写 operator_id → FK violation:consent 成功路径 500 回滚(阻塞主链路)、deny 路径写失败被吞(C 端越权零审计,违反 DEC-006);H2 无 FK → 集成测试假绿(测试库缺约束类假绿第二例)
- V057:audit_logs + subject_user_id UUID FK users(可空)+ idx_audit_logs_subject_user;主体语义=operator_id 与 subject_user_id 恰有一者非空
- AuditLog 实体 +subjectUserId;DataScopeGuard.denyUser(subject 维度 deny,先审计后 403);AuditLogService.recordUserAction 备用入口
- ContactAuthorizationService:consent/decline 改 saveUserAudit(subject 维度);requireOwnedAuthorization 改 denyUser;operator 侧 6 处不变
- 测试:生命周期断言主体分流(consent 行 subject_user_id/operator_id=null/无 assignment_id);非本人 consent 负例补「越权 deny 审计必须落 subject 维度」断言;LATEST_MIGRATION 56→57
- 验证:定向 33/33(授权 13+disabled 2+守卫 5+迁移 13);负向注入 denyUser 写回 operator 维度 → 恰好新断言判红 → 还原复绿
- 发现渠道:本地栈运行时实测(mock 登录新用户 consent 403 → deny 审计 FK 失败日志溯源)
This commit is contained in:
WorkBuddy
2026-10-12 10:15:46 +08:00
parent 02bc01f9c9
commit ef61d51f61
8 changed files with 122 additions and 11 deletions
+3 -1
View File
@@ -111,7 +111,9 @@ CREATE TABLE audit_logs (
updated_at TIMESTAMP WITH TIME ZONE, deleted_at TIMESTAMP WITH TIME ZONE,
-- V055(ZC-MM-006 / T01):扩展审计字段,全可空,与生产对齐
purpose_code VARCHAR(64), service_assignment_id VARCHAR(36),
actor_role_snapshot VARCHAR(128), request_trace_id VARCHAR(64)
actor_role_snapshot VARCHAR(128), request_trace_id VARCHAR(64),
-- V057(运行时实测修复):C 端用户主体维度(operator_id 与 subject_user_id 恰有一者非空)
subject_user_id VARCHAR(36)
);
CREATE TABLE notifications (
id VARCHAR(36) PRIMARY KEY, user_id VARCHAR(36), type VARCHAR(32), title VARCHAR(200), content VARCHAR(2000),