feat(P1): 成片库按用户维度改造,修复一键生成查不到+越权漏洞 #563

Merged
auto-approve-bot merged 4 commits from fix/p1-video-library-user-level into develop 2026-07-19 10:28:33 +08:00
Owner

背景

  • 一键生成的视频project_id为空,前端按项目查成片库查不到
  • /videos接口不传project_id时能查全表,存在越权安全漏洞

方案

改为按user_id维度组织成片库,既解决一键生成查不到的问题,又修复越权漏洞。

改动

  1. Migration: generated_videos表加user_id列及索引
  2. Domain/Model/Repository: 全链路支持user_id字段
  3. API层: /videos默认按当前用户查,project_id降级为可选过滤
  4. Worker层: 写表时透传user_id(edit_plan_generation + one_take生成)
  5. 测试: 补4个单元测试覆盖user_id过滤逻辑
## 背景 - 一键生成的视频project_id为空,前端按项目查成片库查不到 - /videos接口不传project_id时能查全表,存在越权安全漏洞 ## 方案 改为按user_id维度组织成片库,既解决一键生成查不到的问题,又修复越权漏洞。 ## 改动 1. **Migration**: generated_videos表加user_id列及索引 2. **Domain/Model/Repository**: 全链路支持user_id字段 3. **API层**: /videos默认按当前用户查,project_id降级为可选过滤 4. **Worker层**: 写表时透传user_id(edit_plan_generation + one_take生成) 5. **测试**: 补4个单元测试覆盖user_id过滤逻辑
xiaoxia added 1 commit 2026-07-19 09:18:37 +08:00
feat(P1): 成片库按用户维度改造,修复一键生成查不到+越权漏洞
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 39s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 46s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m9s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 1m44s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 2m27s
AI Code Review / AI Code Review (pull_request) Successful in 2m40s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 2m48s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 1m12s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 3m42s
8d0c4c873f
- generated_videos表加user_id列及索引
- 写表时透传user_id(edit_plan_generation + one_take生成)
- /videos接口默认按当前用户查,不传project_id不再查全表
- project_id降级为可选过滤条件
- 补单元测试覆盖user_id过滤逻辑

🚀 预览环境已部署

项目 详情
PR号 #563
预览链接 https://pr-563.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #563 | | 预览链接 | [https://pr-563.preview.xiaoxiajianji.com](https://pr-563.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-07-19 09:30:24 +08:00
fix: GeneratedVideo.create() user_id改为可选参数,保持向后兼容
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 22s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m13s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m32s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 2m32s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 2m59s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m7s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 3m41s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m26s
AI Code Review / AI Code Review (pull_request) Successful in 7m53s
8bb333ccfe
user_id移到关键字参数位置并给默认值空串,避免破坏已有测试调用
xiaoxia added 1 commit 2026-07-19 09:45:19 +08:00
merge origin/develop: 解决测试文件冲突
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 31s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 44s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 49s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 2m5s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 2m49s
AI Code Review / AI Code Review (pull_request) Successful in 3m49s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m19s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 3m59s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m40s
6b3a7226fe
xiaoxia added 1 commit 2026-07-19 10:22:24 +08:00
fix: 更新schema metadata snapshot,补充generated_videos.user_id
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 28s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 52s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 58s
AI Code Review / AI Code Review (pull_request) Successful in 2m57s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m54s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m0s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 3m43s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m34s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 6m9s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 20s
36759a80c3
Collaborator

代码审查结果 - PR #563

⚠️ 问题(2个需要修改)

  1. apps/worker/worker_app/tasks/generation.py 第1516行:变量 user_id 未定义直接使用。

    • 问题描述:在调用 _upload_and_record 时传入了 user_id=user_id,但在 generate_video 函数的作用域内并未看到该变量的定义或提取逻辑(对比 edit_plan_generation.py 中的 plan.created_by_user_id)。这将导致运行时直接抛出 NameError
    • 修改建议:参考 edit_plan_generation.py 的处理方式,从 generation_task 对象中提取 user_id,并处理可能的 None 值(例如 user_id=task.user_id or "")。
  2. packages/domain/generated_video.py 第60行:潜在的 AttributeError 风险。

    • 问题描述:create 方法中执行了 user_id=user_id.strip()。虽然类型注解为 str,但 Python 不强制执行类型,若上游传入 None(例如数据库中旧数据或任务对象属性为空),此处会崩溃。且由于 GeneratedVideoModel 中该字段 nullable=False,若传入 None 会导致数据库插入错误。
    • 修改建议:增加空值保护,改为 user_id = (user_id or "").strip(),确保存入数据库的值不为 None

💡 建议(1个可选)

  1. 数据迁移策略说明
    • 具体内容:Migration 脚本中使用了 server_default="" 处理存量数据。这意味着现有的成片记录 user_id 将为空字符串。配合 Repository 中的 if user_id: 过滤逻辑,这些存量成片将对所有用户不可见(即被“隐藏”)。如果业务上需要保留存量数据的可见性,需要编写额外的数据迁移脚本来归属这些历史记录。

格式检查通过 | 逻辑审查需修改 | 性能检查通过


🤖 由 AI 代码审查机器人自动生成 | 2026-07-19 10:25:22 | 模型:

## 代码审查结果 - PR #563 ### ⚠️ 问题(2个需要修改) 1. **apps/worker/worker_app/tasks/generation.py 第1516行**:变量 `user_id` 未定义直接使用。 - 问题描述:在调用 `_upload_and_record` 时传入了 `user_id=user_id`,但在 `generate_video` 函数的作用域内并未看到该变量的定义或提取逻辑(对比 `edit_plan_generation.py` 中的 `plan.created_by_user_id`)。这将导致运行时直接抛出 `NameError`。 - 修改建议:参考 `edit_plan_generation.py` 的处理方式,从 `generation_task` 对象中提取 `user_id`,并处理可能的 `None` 值(例如 `user_id=task.user_id or ""`)。 2. **packages/domain/generated_video.py 第60行**:潜在的 `AttributeError` 风险。 - 问题描述:`create` 方法中执行了 `user_id=user_id.strip()`。虽然类型注解为 `str`,但 Python 不强制执行类型,若上游传入 `None`(例如数据库中旧数据或任务对象属性为空),此处会崩溃。且由于 `GeneratedVideoModel` 中该字段 `nullable=False`,若传入 `None` 会导致数据库插入错误。 - 修改建议:增加空值保护,改为 `user_id = (user_id or "").strip()`,确保存入数据库的值不为 `None`。 ### 💡 建议(1个可选) 1. **数据迁移策略说明**: - 具体内容:Migration 脚本中使用了 `server_default=""` 处理存量数据。这意味着现有的成片记录 `user_id` 将为空字符串。配合 Repository 中的 `if user_id:` 过滤逻辑,这些存量成片将对所有用户不可见(即被“隐藏”)。如果业务上需要保留存量数据的可见性,需要编写额外的数据迁移脚本来归属这些历史记录。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能检查通过 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-19 10:25:22 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-07-19 10:26:07 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-19 10:26:07 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit fca186533b into develop 2026-07-19 10:28:33 +08:00
auto-approve-bot deleted branch fix/p1-video-library-user-level 2026-07-19 10:28:33 +08:00

🗑️ 预览环境已清理

PR #563 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #563 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.