fix(worker): 素材下载优先按asset_id查,修复项目级素材黑屏问题 #226
Reference in New Issue
Block a user
Delete Branch "fix/generation-project-asset-download"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
一键生成使用项目级素材时,视频全部黑屏。
根因:Worker 端
_download_library_assets查询素材时,先按asset_library_id或project_id做前置过滤,再按asset_ids过滤。当素材的asset_library_id与任务传入的不一致时(项目级素材不属于任何素材库,或属于项目默认库但任务没传对 library_id),查询结果为空,触发 fallback 黑屏。修复
指定 asset_ids 时,直接按 ID 查询,不做 library/project 前置过滤。 归属安全由后续的归属校验保证:
asset_library_id→ 校验素材属于指定素材库project_id→ 校验素材属于指定项目未指定 asset_ids 时(下载全部素材),保持原逻辑不变。
影响范围
_download_library_assets函数查询逻辑审查结论 ✅ 通过,可以合并
安全评估:无越权漏洞
改动核心是查询顺序调整——有
asset_ids时先按 ID 直查,再用归属校验兜底,而不是先按 library/project 预过滤。安全性上没问题:asset_library_id、project_id、asset_ids都从gen_task(DB 记录)读取,不是用户直传,API 层创建任务时已经做过用户权限校验if not asset_library_id and project_id...,素材库模式下不校验 project。新代码去掉了这个前置条件,素材库模式也会校验 project_id,实际更严格功能验证
一个值得注意的行为变更(P2,不阻塞)
素材库模式下新增了
project_id归属校验。从AssetLibrary有project_id字段来看,素材库是项目内的,素材的project_id应该等于任务的project_id,正常场景不受影响。但如果未来有系统预设素材库、跨项目共享素材库之类的场景,这里会直接报错。建议加个注释说明一下,或者保留原来的not asset_library_id前置条件更稳妥。整体改动方向正确,逻辑自洽,安全上比原来更严,可以合并。
1a7d94d892toa6ae041944