feat: restore learning feedback and knowledge capabilities
This commit is contained in:
@@ -1,5 +1,23 @@
|
||||
# BRD 功能审查与未完成项记录
|
||||
|
||||
## 现阶段总览(2026-07-15)
|
||||
|
||||
本节只回答当前 `mobile-uni` 三端交互输入与 BRD 的匹配程度,不替代 L0/L1、生产发布或正式试点验收。按 BRD v1.2 的最终多模态目标评估,当前约为 **60%–70%(部分匹配)**;按总纲阶段一“陪练”执行边界评估,约为 **80%–90%(核心链路基本匹配)**。区间是工程审查判断,不是 BRD 官方验收指标。
|
||||
|
||||
| 角色端 | 文字输入 | 语音输入 | 图片/视频输入 | BRD 判断 |
|
||||
|---|---|---|---|---|
|
||||
| 员工端 | 对练、每日三题、问师傅和复盘意见支持文字 | 对练、每日三题和问师傅均支持浏览器录音或选择音频后 ASR;案例素材支持音频上传;关键题目、回答、点评和总结卡支持播报 | 问师傅本地已支持图片/视频仅用于本次现场分析;对练仍无图像/视频情境输入 | 满足阶段一语音/文本主链路;问师傅多媒体已有本地最小实现,对练仍未满足 BRD 4.3.3 图像/视频情境输入;均未发布生产 |
|
||||
| 候选人端 | 面试支持文字作答 | 面试支持录音转文字和选择音频 | 补充资料支持 PDF/Word/常见图片,但不是图片面试或多模态评分 | 满足 BRD 4.1 语音/文本作答;资料图片上传属于附加能力,不能冲抵 4.3.3 缺口 |
|
||||
| 主管端 | 专项指派、复盘建议和后续训练原因支持文字 | 可回听员工训练录音,不支持主管录音输入 | 无图片/视频提交入口 | 符合当前“查看回放→写复盘→派训练”职责;BRD 未要求主管端同时具备三种输入 |
|
||||
|
||||
已匹配的输入链路:候选人语音/文本面试(BRD 4.1)、员工语音/文本对练与每日一练(4.3/4.4)、主管文字复盘与录音回听(4.4)、案例音频上传(4.6)。尚未闭合的终态要求:员工图像/视频情境输入和服务录像回放(4.3.3)、四川话/粤语等方言的真实样本与 `<=5s` 响应证据(6.5/L1-C)、员工个人文字/文件/图片/链接收藏与混合问答(4.8,明确属于阶段二)。
|
||||
|
||||
此前 `pages/user/today/index.vue` 显示“语音提问,快速解答”,但问师傅只有文字输入,形成前端承诺不一致。2026-07-17 本地已复用 `mobile-uni/src/services/speech.ts` 和现有 `/api/ai/asr` 恢复录音、转写与选择音频兜底,没有新增移动端专用 ASR 接口;正式 ASR 配置和真机麦克风权限仍待发布前验证。
|
||||
|
||||
审查证据来自当前源码与本地渲染控件;本轮未重新执行真实方言 ASR、图片上传、语音响应时延或生产环境端到端测试,因此这些能力继续标记为未验证。图片/视频情境输入已在 `AI陪练二期开发推进计划.md` 中明确为文本场景稳定后的独立评估项;个人知识空间按 `银城员工端APP分阶段实施总纲.md` 留在阶段二,不应拉入当前阶段一主线。
|
||||
|
||||
- 2026-07-15 管理端资料处理分页静态发布:已备份生产根目录至 `/opt/wygj/backups/www-20260715134936`,再同步 `frontend/dist/`;根目录同步未使用 `--delete`,因此未覆盖同目录的 `/h5`。线上 `processing-yUVzof10.js` SHA-256 与本地构建一致。真实管理员会话确认任务分页共 97 页、第二页仍展示 10 条,状态筛选后回到第一页;根站、H5 和租户接口均返回 `200`。本轮未发布后端、迁移数据库或写入业务数据。
|
||||
|
||||
- 2026-07-15 当前发布与资料导入复核:提交 `eacf1a0a` 已发布到线上,`release-preflight.sh` 通过资源/后端哈希、`16/16` schema、根站/H5/API 健康检查,`wygj-aihr.service` 为 `active`。使用真实管理员认证在生产验证 ZIP 异步资料链路:ZIP 入队后拆为 `2` 条队列记录,`2/2` 完成,生成 `1` 个文档和 `2` 个片段;测试队列、附件、片段和 OSS 对象已清理。当前生产 BRD 证据仍未达标:评分校准 `0` 条,SOP 评审 `0/14`,候选资料 `0` 条;组织快照为在职 `22` 条、`2` 个项目、主管/经理岗位 `7` 条,但手机号映射为 `0`。该结果证明“版本已发布、ZIP 功能可用”,不等于正式试点验收完成。
|
||||
|
||||
- 2026-07-15 发布 schema gate 回归:`RELEASE_VERIFY_REMOTE_SCHEMA=true` 的只读预检在保留两份 Figma 文档脏工作区的临时索引下正常运行,根站、租户和员工首页均为 `200`,随后准确拦截线上缺失的 8 张表:`aihr_candidate_employee_link`、`aihr_onboard_task`、`aihr_position_responsibility`、`aihr_practice_rubric`、`aihr_practice_rubric_dimension`、`aihr_practice_scenario`、`aihr_qualification_gate`、`aihr_sop_applicability`;未执行迁移或发布。
|
||||
@@ -276,7 +294,7 @@
|
||||
- 2026-07-14 测试租户 HTTP 回归:在本地临时建立 `codex-a`/`codex-b` 两个租户,用同一手机号分别登录并授予各自 `superadmin` 测试角色;两租户分别调用异步上传和目录导入接口。A 查询不到 B 的上传批次/导入任务,B 也查询不到 A;两个目录导入任务均完成 `1/1`。后台 worker 的队列加工、目录导入、任务进度和查询均保持租户隔离。测试产生的租户、用户、角色、知识库行和临时文件已清理为 0。该证据只覆盖本地测试环境,不替代正式组织同步和生产多租户验收。
|
||||
- 2026-07-14 上传队列上下文收口:`AihrUploadQueueService` 的同步请求租户读取改为 `TenantHelper.getTenantId()`,动态租户上下文优先于登录态,避免重试/嵌套任务回退到错误租户;`AihrUploadQueueServiceTest` 已补对应源码契约断言。AIHR 定向测试与模块编译通过。
|
||||
- 2026-07-14 发布前检查补齐:新增只读 `scripts/release-preflight.sh`,统一核验当前 commit、管理端/H5/后端产物存在性、入口 JS 和 SHA-256;传入 `RELEASE_REMOTE_URL` 时只做公开根站点与租户列表 HTTP 检查,不执行 SSH、rsync、服务重启或生产写入。`docs/DEV_SETUP.md` 已同步发布证据与回滚留痕要求。
|
||||
- 2026-07-14 当前状态复核:本地 `ry-vue` 组织快照有 `3001` 条 active 记录,但手机号可映射仅 `1` 条、项目 `41` 个,不能作为正式 1–2 项目试点身份数据;线上根站、`/h5/` 和租户接口均返回 `200`,但线上管理端仍加载 `index-CJZ3Ax3Z.js`,本地现有构建产物为 `index-Cz1rtpOj.js`,且发布预检被两份已有未提交 Figma 文档阻断,因此未把最新本地提交宣称为已发布。
|
||||
- 2026-07-14 当前状态复核:本地 `ry-vue` 组织快照有 `3001` 条 active 记录,但手机号可映射仅 `1` 条、项目 `41` 个,不能作为正式 1–2 项目试点身份数据;线上根站、`/h5/` 和租户接口均返回 `200`,但线上管理端仍加载 `index-CJZ3Ax3Z.js`,本地现有构建产物为 `index-Cz1rtpOj.js`,且发布预检被两份已有未提交 Figma 文档阻断,因此未把最新本地提交宣称为已发布。该组织身份结论已由 2026-07-15 线上组织同步闭环条目替代。
|
||||
- 2026-07-14 BRD 公开导航回归:`GET /api/knowledge/position-sop` 明确是一期生活顾问学习导航摘要,不返回个人或项目私有数据;控制器补 `@SaIgnore` 后匿名请求返回 `200`,而同一控制器的 `POST /api/knowledge/search` 仍返回业务 `401`,保持“公开只读导航、登录后查询与反馈”的边界。同步完成跨租户异步上传成功路径回归:codex-a/codex-b 各上传独立文件并加工为 `status=2`,互查批次均为空;临时租户、用户、队列、知识库、OSS 与暂存文件已清理。
|
||||
- 2026-07-14 BRD G3 仪表盘权限收口:`/api/aihr/dashboard/overview` 返回组织、训练、知识库、案例和候选资料统计,控制器新增显式 `@SaCheckLogin`;匿名请求业务返回 `401`,同时保留服务层按当前租户过滤。后续正式主管可见范围仍需组织快照和项目权限数据支撑。
|
||||
- 2026-07-14 BRD G3 主管接口权限复核:移动端主管/团队/预警/派题/复盘接口对后台系统用户现在要求 `superadmin` 或 `hr_operator` 角色;APP 用户仍要求组织快照中的主管/项目经理身份。新增源码契约测试与 `demo-check` marker,避免普通后台账号越权读取团队训练数据或创建派题。
|
||||
@@ -435,14 +453,14 @@
|
||||
- 2026-07-14 BRD 门禁夹具同步:严格预检已将 SOP 正式样本限定为带 `requester_ext_party_id` 且能命中在职组织身份的提问记录;原 `demo-check-pilot-gates` 临时表仍是旧 6 列,导致 SOP 指标为空并无法真实覆盖新口径。现补齐主体与 `prompt_version` 字段,使用安全员工主体 `E` 验证 `sop_usable=1/1`、待评审数和窗口过滤,未改变业务数据。
|
||||
- 2026-07-14 BRD 生产迁移回归固化:新增 `scripts/tests/aihr-schema-migrations.test.sh`,在临时 MySQL 库验证 SOP 主体/版本字段和组织入职日期迁移面对旧表、缺前置表时可安全执行且重复执行幂等;不写入开发库业务数据。
|
||||
- 2026-07-14 BRD 生产迁移回归扩展:同一临时 MySQL 回归测试同时连续执行 `aihr_20260714_practice_evidence_mysql8.sql`,确认 `aihr_practice_audio` 与 `aihr_practice_calibration` 两张证据表可重复创建;不写入开发库业务数据。
|
||||
- 2026-07-14 BRD 当前开发库审查快照:生活顾问启用场景 `12`、校准记录 `20`、已评审 SOP `2`,但住宅 SOP 文档仅 `3/5`、已入库案例 `2/20`,在职组织快照 `3001` 条中手机号可映射仅 `1` 条;这些数据不能作为正式试点通过,下一步优先补内容负责人确认的核心流程素材和正式组织身份映射,不用烟测记录替代。
|
||||
- 2026-07-14 BRD 当前开发库审查快照:生活顾问启用场景 `12`、校准记录 `20`、已评审 SOP `2`,但住宅 SOP 文档仅 `3/5`、已入库案例 `2/20`,在职组织快照 `3001` 条中手机号可映射仅 `1` 条;这些数据不能作为正式试点通过,下一步优先补内容负责人确认的核心流程素材和正式组织身份映射,不用烟测记录替代。该组织身份映射结论已由 2026-07-15 线上组织同步闭环条目替代,内容/案例/正式试点样本风险仍需继续跟进。
|
||||
- 2026-07-14 BRD 5.4 训练隐私边界补强:组织快照存在且默认关闭显示字段时,员工历史、主管复盘详情、任务列表和正式试点 CSV 明细不再直接返回历史 `trainee_name`,统一回退为“员工”;新产生的训练、每日题和错题再练记录也不再默认写入姓名,只有显式开启 `aihr.org-sync.store-display-fields` 才展示/保留名称。新增服务回归断言与 `demo-check` marker,保留稳定 `formal_ext_party_id`、项目和训练证据字段;该修复不替代历史显示字段清理、保留期和法务确认。
|
||||
- 2026-07-14 BRD G3 组织快照缺失 fail-closed:主管团队接口此前在 `aihr_org_snapshot` 不存在时回退读取训练/派发表,生产迁移遗漏可能把历史姓名和非正式范围暴露给后台主管视图;现仅 `dev/local` profile 允许演示回退,其他 profile 在组织快照不可用时返回空团队并停止继续查询活动数据。新增“非 Demo 无快照直接为空”回归测试与 `demo-check` marker,不改变本地演示路径。
|
||||
- 2026-07-14 BRD 5.4 隐私开关一致性修复:部分兼容查询此前只有在检测到组织快照表时才隐藏姓名,组织表暂缺时可能绕过 `store-display-fields=false`;现员工历史、任务/主管记录、复盘详情及无快照演示成员读取均统一由显示开关控制,默认关闭即返回“员工”。dev 配置仍显式开启用于演示,生产默认关闭;AIHR 全量真测试通过,未修改业务数据。
|
||||
- 2026-07-14 BRD 严格门禁绕过修复:`AIHR_DEMO_CHECK_LIBRARY_ONLY=true` 仅允许测试加载脚本函数,和 `AIHR_PILOT_STRICT=true` 同时使用时现在直接失败,避免调试开关把正式试点检查静默跳过;新增回归断言,未修改业务数据。
|
||||
- 2026-07-14 线上浏览器身份复核:使用数据库已有手机号 `13900001111` 和当前 dev 验证码规则登录 `https://peilian.njzhmj.top/h5/` 成功,但随后进入“确认岗位”页并提示“未从组织数据匹配到岗位”,说明线上手机号登录链路可用而正式组织岗位映射仍未闭合;本轮未点击岗位确认,不写入线上岗位数据。
|
||||
- 2026-07-14 BRD 本轮线上只读复核:生产根站、`/h5/`、`/prod-api/auth/tenant/list` 和 `/prod-api/api/aihr/mobile/home/user` 均返回 `200`;线上仍加载管理端 `assets/index-CJZ3Ax3Z.js` 与 H5 `assets/index-D4-NrEpb.js`。当前本地 `HEAD=8d5cb3d6` 的隐私/组织快照修复尚未重新构建或发布,本轮未执行生产静态同步、后端重启或业务数据写入;线上手机号登录仍会进入“确认岗位”但无法匹配正式组织岗位,P0 组织同步缺口保持未完成。
|
||||
- 2026-07-14 BRD 5.4 组织快照响应字段复核:`OrgPersonRow` 不包含 `person_phone`,手机号只用于服务端身份映射、过滤和统计;`/api/aihr/org/snapshot` 仍要求 `superadmin/hr_operator`,`store-display-fields=false` 时姓名和部门返回空值。当前未发现新的手机号响应泄露,因此不新增重复脱敏代码;正式组织同步、手机号覆盖率和历史字段治理仍保持 P0 未完成。
|
||||
- 2026-07-14 BRD 本轮线上只读复核:生产根站、`/h5/`、`/prod-api/auth/tenant/list` 和 `/prod-api/api/aihr/mobile/home/user` 均返回 `200`;线上仍加载管理端 `assets/index-CJZ3Ax3Z.js` 与 H5 `assets/index-D4-NrEpb.js`。当前本地 `HEAD=8d5cb3d6` 的隐私/组织快照修复尚未重新构建或发布,本轮未执行生产静态同步、后端重启或业务数据写入;线上手机号登录仍会进入“确认岗位”但无法匹配正式组织岗位。该 P0 组织同步缺口已由 2026-07-15 线上组织同步闭环条目替代,本条只保留当时线上资源状态。
|
||||
- 2026-07-14 BRD 5.4 组织快照响应字段复核:`OrgPersonRow` 不包含 `person_phone`,手机号只用于服务端身份映射、过滤和统计;`/api/aihr/org/snapshot` 仍要求 `superadmin/hr_operator`,`store-display-fields=false` 时姓名和部门返回空值。当前未发现新的手机号响应泄露,因此不新增重复脱敏代码;正式组织同步和手机号覆盖率已由 2026-07-15 线上同步闭环补齐,历史字段治理仍需独立跟进。
|
||||
- 2026-07-14 BRD 发布预检复核:在隔离干净工作树按当前 `HEAD=8f2ace4a` 重新构建管理端、`mobile-uni` H5 和后端 jar,`release-preflight.sh` 的产物新鲜度、根站和租户业务码检查通过;本地管理端主资源 `index-CX4fynEb.js`(SHA-256 `c800022a22e82e81782da590cfec81145852014a6521f7521775720e0f1087fe`)与 H5 `index-C1WoTt0t.js`(SHA-256 `bfb07609acecde3678ed18bf48ce022f36596c6b946e076436fe242cf3e15675`)均与线上 `index-CJZ3Ax3Z.js` / `index-D4-NrEpb.js` 不一致,预检按预期停止;本轮未执行生产静态同步、后端重启或业务数据写入。
|
||||
- 2026-07-14 BRD G3 OSS 元数据租户隔离修复:SOP 文档去重、处理概览和文件解析元数据此前通过 `JdbcTemplate` 仅按 `sys_oss.oss_id` 读取/更新,未显式约束 `sys_oss.tenant_id`;现统一要求 `sys_oss.tenant_id = aihr_knowledge_attach.tenant_id` 或当前租户,避免跨租户 OSS 元数据被误读/覆盖。新增 `AihrSopSeedServiceTest` 契约断言与 `demo-check` marker;未修改业务数据或生产环境。
|
||||
- 2026-07-14 BRD G3 Qdrant 共享 collection 隔离修复:重建单租户向量索引此前会删除整个共享 Qdrant collection,并用全局点数与当前租户 MySQL 数量比较;现改为按当前租户 payload filter 删除和统计点数,保留其他租户向量。新增回归契约与 `demo-check` marker;未修改业务数据或生产环境。
|
||||
@@ -456,4 +474,61 @@
|
||||
- 2026-07-15 BRD G3 候选人面试操作角色边界修复:`/api/recruit/interview/start`、`answer`、`finish` 此前只要求登录,普通后台系统用户可绕过 HR/管理员权限创建或完成面试;现统一限制为 APP 候选人本人或 `superadmin/hr_operator`,候选人会话仍按本人手机号绑定。新增源码契约测试和 `demo-check` marker;尚未发布生产。
|
||||
- 2026-07-15 BRD G3 面试未知会话状态边界修复:系统用户调用 `answer` 携带不存在或已失效的 `sessionId` 此前会返回“已暂存”而不暴露会话无效;现统一要求会话存在且属于当前租户,`finish` 保留 HR 管理端既有的兼容性创建逻辑。新增服务回归测试和 `demo-check` marker;尚未发布生产。
|
||||
- 2026-07-15 BRD 发布状态只读复核:生产根站、`/h5/`、`/prod-api/auth/tenant/list` 和 `/prod-api/api/aihr/mobile/home/user` 均返回 HTTP `200`,`wygj-aihr.service` 为 `active`;生产 H5 仍加载 `index-CDn6TrX8.js`,本地最新候选人面试权限/未知会话修复提交 `217edb09` 尚未证明已发布。本轮仅执行 HTTP、服务状态和 H5 资源只读检查,未同步静态资源、重启后端、执行迁移或写入生产业务数据。
|
||||
# 2026-07-15 BRD G3/G6 训练语音原始地址暴露收紧:ASR/TTS 成功响应此前可直接返回 `sys_oss.url`,训练历史、主管复盘和管理端复盘在缺少 `audioOssId` 时也会回退播放原始 `audioUrl`;现统一只回传受保护 OSS 编号,服务端持久化/响应仅保留 `data:audio/*` 内联降级,客户端也拒绝 HTTP 音频地址直接播放。TTS 仍写入 `sys_oss`,旧移动端通过内联 data URL 保持可播放;已补源码契约测试和两端回放边界,未修改生产资源或生产数据。
|
||||
- 2026-07-15 BRD G3/G6 训练语音原始地址暴露收紧:ASR/TTS 成功响应此前可直接返回 `sys_oss.url`,训练历史、主管复盘和管理端复盘在缺少 `audioOssId` 时也会回退播放原始 `audioUrl`;现统一只回传受保护 OSS 编号,服务端持久化/响应仅保留 `data:audio/*` 内联降级,客户端也拒绝 HTTP 音频地址直接播放。TTS 仍写入 `sys_oss`,旧移动端通过内联 data URL 保持可播放;已补源码契约测试和两端回放边界,未修改生产资源或生产数据。
|
||||
- 2026-07-15 BRD 4.6/P0 组织同步线上闭环:生产 `/opt/wygj/config/wygj.env` 已配置开放组织同步变量并备份为 `/opt/wygj/config/wygj.env.bak-orgsync-20260715141150`,`wygj-aihr.service` 重启后租户接口和员工首页 API 均返回业务成功;线上执行 `POST /prod-api/api/aihr/org/sync` dry-run 与覆盖同步成功,开放平台返回公司 17、部门 963、员工 3417,生产 `aihr_org_snapshot` 为 3417 行、手机号可映射 3392、手机号不可用 25、疑似乱码 0、在职 2943、离职 474。本轮未替换 jar 或静态资源;25 名员工手机号不可用是上游数据问题,不阻塞组织同步功能发布,但正式试点仍需真实训练、校准和 SOP 评审样本。
|
||||
|
||||
## 2026-07-16 多租户知识平台第一版实施结论
|
||||
|
||||
需求与实施依据:
|
||||
|
||||
- 需求方案:`docs/superpowers/specs/2026-07-16-multi-tenant-knowledge-platform-design.md`
|
||||
- 实施计划:`docs/superpowers/plans/2026-07-16-multi-tenant-knowledge-platform.md`
|
||||
- 运维与验收:`docs/KNOWLEDGE_PLATFORM_RUNBOOK.md`
|
||||
- 第一版边界:银城、美途作为独立租户;租户内支持多个知识空间;调用应用与知识空间建立多对多授权;登录用户实际可访问空间取“应用授权空间”和“用户/角色授权空间”的交集;第一版不做跨租户共享、集团账号天然穿透、跨空间去重和图谱化编排。
|
||||
|
||||
### 完成度分层
|
||||
|
||||
| 层级 | 结论 | 证据与边界 |
|
||||
|---|---|---|
|
||||
| 开发完成 | 是 | 已完成知识空间、主体授权、应用、令牌、统一问答、查询审计、数据工具、文档成员关系、单空间解绑、管理端、员工端调用迁移、初始化与验收脚本;后端全量 AIHR 测试 `166/166`,管理端测试 `7/7`,移动端测试 `57/57`,相关构建与类型检查通过。 |
|
||||
| 本地联调可用 | 是 | 本地银城/美途双租户真实 HTTP 验证 `18/18`;验证租户隔离、授权交集、未授权 `403`、停用/过期令牌、限流、来源引用、无证据语义、员工与团队数据工具、同一 OSS 多空间成员关系及仅解绑当前空间。数据库复核确认美途应用已停用且令牌清空、银城公共空间成员已解绑、物业空间成员和 OSS 对象仍保留、解绑审计已记录。 |
|
||||
| 线上生效 | 否 | 本轮未执行生产数据库迁移、应用初始化、后端发布、静态资源同步或生产密钥写入;不能用本地通过替代线上发布证据。 |
|
||||
| 正式试点验收 | 否 | 尚缺知识空间业务负责人、正式角色矩阵、各空间首批内容清单和标准问题、可信调用端清单、生产密钥托管、日志保留期、容量与告警阈值以及业务签字;因此不能宣称正式试点完成。 |
|
||||
|
||||
### 功能需求逐项审计
|
||||
|
||||
| # | 需求 | 工程结论 | 证据或剩余条件 |
|
||||
|---:|---|---|---|
|
||||
| 1 | 银城、美途空间和应用按租户隔离 | 通过 | 双租户 HTTP 正反例、数据库 tenant 归属和跨租户 `403` 通过。 |
|
||||
| 2 | 银城三个首批空间、美途一个空间具备稳定编码、负责人、授权和验证题单 | 部分通过 | 四个稳定编码和工程授权已初始化;业务负责人、正式内容清单和每空间标准题单待提交,因此不满足正式试点。 |
|
||||
| 3 | 应用与空间多对多 | 通过 | `aihr_knowledge_app_space`、管理接口、初始化脚本和合同测试通过。 |
|
||||
| 4 | 内部有效范围为应用授权与主体授权交集 | 通过 | 授权服务单测和真实未授权请求验证通过,空交集在检索前拒绝。 |
|
||||
| 5 | 美途名片应用只能访问美途客户咨询空间 | 通过(本地) | 测试令牌只绑定 `mt_customer_service`;访问银城空间返回 `403`,联调结束后应用已停用并清空令牌。 |
|
||||
| 6 | 显式越权空间返回 `403`,省略空间只查询有效范围 | 通过 | 真实 HTTP 与服务测试均覆盖。 |
|
||||
| 7 | 回答包含空间和文档引用,无依据返回 `noEvidence=true` | 通过 | 银城、美途正例及无依据用例通过。 |
|
||||
| 8 | 同文件多空间独立检索,单空间解绑不影响另一空间和 OSS | 通过 | 非生产专用文件完成破坏性解绑验证;公共空间成员移除,物业空间成员和原 OSS 仍各保留 `1` 个引用,管理审计有 `2` 条 `UNBIND/DOCUMENT` 记录。 |
|
||||
| 9 | 本人/团队数据工具按服务端身份和管理范围执行,外部应用禁用工具 | 通过 | 员工、主管正例及员工越权、外部应用调用反例通过。 |
|
||||
| 10 | 旧 `/api/knowledge/search` 保持兼容且不再搜索租户全库 | 通过 | 旧入口已收口到统一授权查询服务,客户端合同测试和服务测试通过。 |
|
||||
|
||||
安全矩阵中的错误/停用/过期令牌、限流 `429`、伪造 `tenantId/userId/extPartyId`、员工团队工具越权、外部应用数据工具越权和无有效空间零召回均已由自动化或本地真实 HTTP 覆盖。Qdrant `aihr_knowledge` 当前健康,`points_count=450`;查询过滤源码与服务测试同时要求当前租户和有效 `knowledgeIds`。
|
||||
|
||||
### 第一批空间初始化建议
|
||||
|
||||
- 银城:`yc_public_policy`(公共制度与通用政策)、`yc_property_sop`(物业服务 SOP)、`yc_management_ops`(经营分析与管理制度)。前三个空间已完成工程初始化;具体负责人、受众、首批文件和标准问题仍须业务确认。
|
||||
- 美途:`mt_customer_service`(客户咨询知识)。已完成独立租户与独立空间的工程初始化;不得绑定银城空间或复用银城调用应用。
|
||||
- `yc_finance` 暂不作为第一批工程默认空间,待财务负责人、数据库字段白名单、聚合口径和审计要求明确后再启用,避免知识文档权限被误当成结构化数据权限。
|
||||
|
||||
### 安全结论
|
||||
|
||||
- 多个空间的主要价值是内容治理和最小授权,不是仅靠“分库”自动获得安全;所有表、检索、向量 payload、查询日志和 OSS 元数据都以租户为硬边界,空间授权作为租户内第二层边界。
|
||||
- 外部应用仅保存令牌哈希,明文只在创建/轮换时返回一次;停用、过期、越权和超限均拒绝请求。
|
||||
- 同一文档可在同租户多个空间形成独立成员关系,解析和向量加工复用;解绑只删除当前空间的附件/片段/向量成员,最后一个引用解除后才清理 OSS,第一版不做跨空间内容去重。
|
||||
- 结构化数据工具不继承文档空间权限,按工具白名单、调用主体、当前租户和本人/团队范围重新校验;第一版不开放任意 SQL 或任意数据库直连。
|
||||
|
||||
### 上线前硬门槛
|
||||
|
||||
1. 业务确认四个首批空间的负责人、受众、内容清单、有效期和每空间至少 10 个标准问题。
|
||||
2. 银城、美途分别确认应用清单、部署位置、回调来源、负责人和生产令牌托管方式;生产令牌不得写入仓库、聊天记录或日志。
|
||||
3. 在测试环境执行版本化迁移、初始化、双租户验收、令牌轮换/吊销、限流与审计查询,并留存完整结果。
|
||||
4. 确认查询日志保留期、问题哈希策略、Qdrant 容量、失败率与延迟告警阈值、备份恢复和回滚窗口。
|
||||
5. 生产发布须单独授权,按运维手册执行备份、迁移、发布、初始化、验收和回滚演练;完成线上 HTTP/数据库/Qdrant 证据链后,才能把“线上生效”改为“是”。
|
||||
|
||||
Reference in New Issue
Block a user