Skip to content

fix(audit): collection - #8070

Open
shortlight5980 wants to merge 1 commit into
labring:mainfrom
shortlight5980:audit-collection
Open

shortlight5980 wants to merge 1 commit into
labring:mainfrom
shortlight5980:audit-collection

Conversation

@shortlight5980

Copy link
Copy Markdown
Collaborator

审计操作 触发场景 日志文案
创建集合 手动新建集合或文件夹、文本 / 链接 / 文件 / 图片集导入、备份与模板导入、新建知识库时附带文件 【张三】在产品手册/技术文档中创建了【文件】【API 设计.pdf】
更新集合属性 集合改名、移动到其他目录、启用或禁用 【张三】将【产品手册】中【API 设计.pdf】的【名称】从【旧名称】调整为【新名称】
导出集合内容 导出集合内的问答数据 【张三】导出了【产品手册】中【API 设计.pdf】的集合内容
同步集合 对链接集合、API 文件集合执行同步 【张三】同步了【产品手册】中【API 设计.pdf】
添加集合标签 单个或批量给集合打标签 【张三】为【产品手册】中【API 设计.pdf】添加了标签【已审核】
移除集合标签 单个或批量移除集合的标签 【张三】移除了【产品手册】中【API 设计.pdf】的标签【已审核】

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 57.78% 6075 / 10513
🔵 Statements 57.32% 6415 / 11191
🔵 Functions 53.15% 1137 / 2139
🔵 Branches 51.91% 3239 / 6239
File CoverageNo changed files found.
Generated in workflow #4694 for commit b08d341 by the Vitest Coverage Report Action

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

✅ Admin Preview Image Ready!

ghcr.io/labring/fastgpt-pr:admin_b08d341eed23dae8edabe937b1ea944df779f9c3

🕒 Time: 2026-10-22 17:31:22 (UTC+8)

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

✅ Build and publish successful - Preview fastgpt Image:

ghcr.io/labring/fastgpt-pr:fastgpt_b08d341eed23dae8edabe937b1ea944df779f9c3

🕒 Time: 2026-10-22 17:33:43 (UTC+8)

Comment thread packages/global/core/dataset/constants.ts Outdated
Comment thread packages/service/core/dataset/collection/paths.ts
Comment thread packages/service/support/user/audit/schema.ts Outdated

Copy link
Copy Markdown
Collaborator

基于提交 8ba19ca9b4a7b270109a3db67821b262ca036d15 的变更梳理,已展开检查 pro 子模块。建议合并前处理以下问题。

1. [P1] 新审计事件会导致团队审计列表读取失败

Mongo 审计 schema 已接入 DatasetAuditEventList,但 AuditListItemSchema 仍只接受旧 AuditEventEnum。pro 的团队审计列表会查询到新事件,随后 AuditListResponseSchema.parse() 在 list[n].event 处失败,导致整页无法读取。直接加载该提交的真实 schema 复现,7 个新事件全部被拒绝。

同一文件的筛选入参、TeamAuditSchemaType / TeamAuditListItemType 和前端事件筛选菜单也未同步。建议统一汇总成员审计事件,供 Mongo schema、Zod、共享类型和筛选菜单复用,并保留旧事件的历史兼容。

2. [P2] 属性审计新增的翻译 key 会被清理脚本误删

collection/update.ts:155 等位置直接保存 account_team:dataset_content_change_item_*、account_team:dataset_content_status_* 裸字符串,没有使用 i18nT('固定 key') 标记。四种语言目前齐全,但用现有清理器的扫描逻辑验证,这 5 个 key 全部被判为未使用,后续执行清理会导致审计文案裸显 key。建议为各个固定 key 补上静态标记。

3. [P2] 批量标签审计未核对每个集合的实际变化

pro/admin/src/pages/api/core/dataset/tag/batchSetCollectionTags.ts:59 对全部请求集合记录同一组标签名称。使用真实 controller、模拟数据库读写复现:集合原本没有该标签,移除前后 tags 都为空,仍会写入 dataset.collection.tag.removed。不同集合只有部分标签时,日志也无法准确反映各自的变更。建议业务层从事务内快照计算并返回逐集合的实际差异,提交成功后据此写入审计。

4. [P2] 同步返回失败时仍记录“已同步”

collection/sync.ts:33 在 syncCollection() 返回后无条件记录 dataset.collection.synced。该函数可以正常返回 failed 而不抛异常;隔离执行真实路由已确认,响应为 failed 时仍生成“已同步”日志,且没有结果字段。建议按结果记录,或明确记录操作尝试并附带结果。导出异常路径同样需要统一这一语义。

风格、验证与合并事项

  • 审计 constants.ts:136 新增 export type { DatasetAuditEvent },违反仓库禁止 re-export 的规范,使用方应直接从定义模块导入。
  • 已做只读源码复现和主仓库、子模块 git diff --check,未在本地运行 Vitest。需要补充“新事件写入后读取及筛选”、标签无实际变化、同步失败和导出中断的覆盖。
  • 当前 test-app CI 失败:fileSourceLifecycle.test.ts 的 logger mock 缺少 LogCategories.INFRA.MONGO,新增审计模块导入后在测试收集阶段报错。该 CI 中更新、恢复继承和路径测试已通过。
  • 主仓库未发现明显无关改动。pro 差异中的网站爬虫早停修复已在当前主线存在;处理当前合并冲突时,需要保留主线已有的两个 workflow 修复,再更新最终子模块指针。

需要明确的语义:审计记录“操作尝试”还是“成功变更”?若覆盖失败或无实际变化的请求,应补充结果字段和对应文案。

@shortlight5980

Copy link
Copy Markdown
Collaborator Author

基于提交 8ba19ca9b4a7b270109a3db67821b262ca036d15 的变更梳理,已展开检查 pro 子模块。建议合并前处理以下问题。

1. [P1] 新审计事件会导致团队审计列表读取失败

Mongo 审计 schema 已接入 DatasetAuditEventList,但 AuditListItemSchema 仍只接受旧 AuditEventEnum。pro 的团队审计列表会查询到新事件,随后 AuditListResponseSchema.parse() 在 list[n].event 处失败,导致整页无法读取。直接加载该提交的真实 schema 复现,7 个新事件全部被拒绝。

同一文件的筛选入参、TeamAuditSchemaType / TeamAuditListItemType 和前端事件筛选菜单也未同步。建议统一汇总成员审计事件,供 Mongo schema、Zod、共享类型和筛选菜单复用,并保留旧事件的历史兼容。

2. [P2] 属性审计新增的翻译 key 会被清理脚本误删

collection/update.ts:155 等位置直接保存 account_team:dataset_content_change_item_*、account_team:dataset_content_status_* 裸字符串,没有使用 i18nT('固定 key') 标记。四种语言目前齐全,但用现有清理器的扫描逻辑验证,这 5 个 key 全部被判为未使用,后续执行清理会导致审计文案裸显 key。建议为各个固定 key 补上静态标记。

3. [P2] 批量标签审计未核对每个集合的实际变化

pro/admin/src/pages/api/core/dataset/tag/batchSetCollectionTags.ts:59 对全部请求集合记录同一组标签名称。使用真实 controller、模拟数据库读写复现:集合原本没有该标签,移除前后 tags 都为空,仍会写入 dataset.collection.tag.removed。不同集合只有部分标签时,日志也无法准确反映各自的变更。建议业务层从事务内快照计算并返回逐集合的实际差异,提交成功后据此写入审计。

4. [P2] 同步返回失败时仍记录“已同步”

collection/sync.ts:33 在 syncCollection() 返回后无条件记录 dataset.collection.synced。该函数可以正常返回 failed 而不抛异常;隔离执行真实路由已确认,响应为 failed 时仍生成“已同步”日志,且没有结果字段。建议按结果记录,或明确记录操作尝试并附带结果。导出异常路径同样需要统一这一语义。

风格、验证与合并事项

  • 审计 constants.ts:136 新增 export type { DatasetAuditEvent },违反仓库禁止 re-export 的规范,使用方应直接从定义模块导入。
  • 已做只读源码复现和主仓库、子模块 git diff --check,未在本地运行 Vitest。需要补充“新事件写入后读取及筛选”、标签无实际变化、同步失败和导出中断的覆盖。
  • 当前 test-app CI 失败:fileSourceLifecycle.test.ts 的 logger mock 缺少 LogCategories.INFRA.MONGO,新增审计模块导入后在测试收集阶段报错。该 CI 中更新、恢复继承和路径测试已通过。
  • 主仓库未发现明显无关改动。pro 差异中的网站爬虫早停修复已在当前主线存在;处理当前合并冲突时,需要保留主线已有的两个 workflow 修复,再更新最终子模块指针。

需要明确的语义:审计记录“操作尝试”还是“成功变更”?若覆盖失败或无实际变化的请求,应补充结果字段和对应文案。

Resloved

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants