From d3735e3afa10e08568b47beb1158286066e9d9e1 Mon Sep 17 00:00:00 2001 From: WorkBuddy Date: Sun, 11 Oct 2026 13:08:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(matchmaker,contactauth):=20=E5=8F=97?= =?UTF-8?q?=E6=8E=A7=E8=81=94=E7=B3=BB=E6=8E=88=E6=9D=83=E6=9C=BA=E5=88=B6?= =?UTF-8?q?=E7=AB=8B=E9=A1=B9=E8=90=BD=E5=9C=B0=EF=BC=88OQ-MATCHMAKER-003?= =?UTF-8?q?=20/=20DEC-MATCHMAKER-003=20B1=20=E4=BE=8B=E5=A4=96=E9=80=9A?= =?UTF-8?q?=E9=81=93=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端: - V056 matchmaker_contact_authorizations 表:channel CHECK(phone/offline_meeting/full_contact)、六态状态机(pending_approval→pending_consent→active→expired/revoked, →rejected)、部分唯一索引 uq_mm_contact_auth_active 防同红娘-同用户-同渠道多 ACTIVE、双态惰性收敛(active 过期 + pending_consent 超同意窗口) - ContactAuthorizationConfig 五 canonical key(matchmaker.contact.*):enabled 代码缺省 false fail-safe(yml 显式 true)/approver-authorities 双岗并列/consent-deadline-hours 72/default-validity-days 7/retention-days 365,全部 DEFAULT+CONFIG 待产品+法务终审 - ContactAuthorizationPolicy.assertContactAllowed(404 化 deny 先审计后 404) + canContact 徽标查询 - ContactAuthorizationService:request(须有效分配+purpose 必填)/approve(权限码动态判定∈配置+组长组织范围)/consent(用户本人,仅 pending_consent)/decline/revoke(reason 必填)/disclose(唯一披露出口:enabled fail-safe→assertActiveAssignment→assertContactAllowed→仅返回 phone/disclosedAt/authorizationId 三键,每次落 SensitiveAccessLog user_phone_disclosure,phone 不落应用日志) - 双控制器:运营端 /operator/matchmaker/contact-authorizations + C 端 /contact-authorizations(UserPrincipal 归属校验,独立端点无预同意参数),不碰 SecurityConfig 守卫翻转(机械锁强制复审机制按设计生效): - MatchmakerContactGuardTest 由「锁不存在」翻转为「锁新契约」五条:回显白名单类收敛/端点前缀收敛(受治理三包)/到期语义/consent 独立性三端扫描(后端+miniapp+admin-web,修复原只扫后端的预同意参数逃逸缺口)/ReferralService 白名单与无 @Scheduled 保留 - run-backend-contracts CURATED 18→20 前端: - miniapp 新页 pages/contact-consent(目的/渠道/窗口明示+独立同意拒绝按钮无预勾选,app.json 第 64 页) + 红娘工作台申请/列表/撤销 - admin-web「联系授权审批」tab(审批岗队列+本人授权撤销,枚举码中文映射) 验证:mvn verify 895/895(3 skip)、UI 契约 24/24(64 页)、后端契约门禁 228/CURATED 20、小程序真编译 87 WXML 0 失败;负向注入 5(工程师)+2(QA 不同落点)判红→还原复绿;QA 抓 disclose 键数收敛断言缺口已补并回归;QA fresh eyes PASS 0 P0/P1 --- .../matchmaker/MatchmakerManagementView.vue | 85 +++- .../ContactAuthorizationUserController.java | 55 +++ .../config/ContactAuthorizationConfig.java | 57 +++ ...chmakerContactAuthorizationController.java | 98 +++++ .../MatchmakerContactAuthorization.java | 42 ++ .../MatchmakerContactAuthorizationMapper.java | 60 +++ .../service/ContactAuthorizationPolicy.java | 55 +++ .../service/ContactAuthorizationService.java | 401 ++++++++++++++++++ .../service/MatchmakerAssignmentService.java | 17 + .../platform/shared/constant/Constants.java | 32 ++ backend/src/main/resources/application.yml | 10 + ..._add_matchmaker_contact_authorizations.sql | 50 +++ .../deployment/MigrationValidationTest.java | 4 +- .../MatchmakerContactAuthorizationTest.java | 380 +++++++++++++++++ .../MatchmakerContactGuardTest.java | 400 +++++++++++------ ...peratorEndpointPermissionCoverageTest.java | 4 + backend/src/test/resources/schema-h2.sql | 35 ++ miniapp/app.json | 3 +- .../pages/contact-consent/contact-consent.js | 102 +++++ .../contact-consent/contact-consent.json | 4 + .../contact-consent/contact-consent.wxml | 39 ++ .../contact-consent/contact-consent.wxss | 21 + .../matchmaker-workbench.js | 110 +++++ .../matchmaker-workbench.wxml | 51 +++ .../matchmaker-workbench.wxss | 17 + scripts/run-backend-contracts.mjs | 5 + ui-tests/ui-contracts.mjs | 3 +- 27 files changed, 1996 insertions(+), 144 deletions(-) create mode 100644 backend/src/main/java/com/danyang/match/platform/contactauth/controller/ContactAuthorizationUserController.java create mode 100644 backend/src/main/java/com/danyang/match/platform/matchmaker/config/ContactAuthorizationConfig.java create mode 100644 backend/src/main/java/com/danyang/match/platform/matchmaker/controller/MatchmakerContactAuthorizationController.java create mode 100644 backend/src/main/java/com/danyang/match/platform/matchmaker/entity/MatchmakerContactAuthorization.java create mode 100644 backend/src/main/java/com/danyang/match/platform/matchmaker/mapper/MatchmakerContactAuthorizationMapper.java create mode 100644 backend/src/main/java/com/danyang/match/platform/matchmaker/service/ContactAuthorizationPolicy.java create mode 100644 backend/src/main/java/com/danyang/match/platform/matchmaker/service/ContactAuthorizationService.java create mode 100644 backend/src/main/resources/db/migration/V056__add_matchmaker_contact_authorizations.sql create mode 100644 backend/src/test/java/com/danyang/match/platform/matchmaker/MatchmakerContactAuthorizationTest.java create mode 100644 miniapp/pages/contact-consent/contact-consent.js create mode 100644 miniapp/pages/contact-consent/contact-consent.json create mode 100644 miniapp/pages/contact-consent/contact-consent.wxml create mode 100644 miniapp/pages/contact-consent/contact-consent.wxss diff --git a/admin-web/src/modules/matchmaker/MatchmakerManagementView.vue b/admin-web/src/modules/matchmaker/MatchmakerManagementView.vue index 86baf7c..92e90d4 100644 --- a/admin-web/src/modules/matchmaker/MatchmakerManagementView.vue +++ b/admin-web/src/modules/matchmaker/MatchmakerManagementView.vue @@ -66,6 +66,36 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -136,7 +166,7 @@