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

- generated_videos表加user_id列及索引
- 写表时透传user_id(edit_plan_generation + one_take生成)
- /videos接口默认按当前用户查,不传project_id不再查全表
- project_id降级为可选过滤条件
- 补单元测试覆盖user_id过滤逻辑
This commit is contained in:
CI Bot
2026-07-19 09:17:59 +08:00
parent ef8b747c7b
commit 8d0c4c873f
11 changed files with 186 additions and 3 deletions
@@ -14,6 +14,7 @@ class SQLAlchemyGeneratedVideoRepository:
model = GeneratedVideoModel(
id=video.id,
project_id=video.project_id,
user_id=video.user_id,
generation_task_id=video.generation_task_id,
name=video.name,
file_url=video.file_url,
@@ -43,6 +44,7 @@ class SQLAlchemyGeneratedVideoRepository:
return GeneratedVideo(
id=model.id,
project_id=model.project_id,
user_id=getattr(model, "user_id", ""),
generation_task_id=model.generation_task_id,
name=model.name,
file_url=model.file_url,
@@ -103,15 +105,18 @@ class SQLAlchemyGeneratedVideoRepository:
def list_paginated(
self,
*,
user_id: str | None = None,
project_id: str | None = None,
status: str | None = None,
review_status: str | None = None,
page: int = 1,
page_size: int = 20,
) -> tuple[list[GeneratedVideo], int]:
"""分页查询成片列表,支持按项目、状态、复核状态筛选。"""
"""分页查询成片列表,支持按用户、项目、状态、复核状态筛选。"""
query = self.session.query(GeneratedVideoModel)
if user_id:
query = query.filter(GeneratedVideoModel.user_id == user_id)
if project_id:
query = query.filter(GeneratedVideoModel.project_id == project_id)
if status:
@@ -183,6 +188,7 @@ class SQLAlchemyGeneratedVideoRepository:
return GeneratedVideo(
id=model.id,
project_id=model.project_id,
user_id=getattr(model, "user_id", ""),
generation_task_id=model.generation_task_id,
name=model.name,
file_url=model.file_url,
@@ -282,6 +282,7 @@ class GeneratedVideoModel(Base):
id = Column(String(36), primary_key=True)
project_id = Column(String(36), nullable=False, index=True)
user_id = Column(String(36), nullable=False, default="", index=True)
generation_task_id = Column(String(36), nullable=False, index=True)
name = Column(String(255), nullable=False)
# file_url: 完整可访问的 URL,用于客户端直接访问视频