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:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user