feat: get_project_dir_pl产线隔离版——跨产线项目视为无项目(商机空间不显示开发项目)

This commit is contained in:
ymq 2026-08-29 15:00:20 +08:00
parent eaebca297d
commit 31eff0757e

View File

@ -275,6 +275,31 @@ async def get_project_dir(sor, uid, session_id=''):
return os.path.join(space_dir, 'projects', dname), workspace_base
async def get_project_dir_pl(sor, uid, session_id='', pipeline_id=''):
"""产线隔离版:会话项目与指定产线不一致时视为无项目(返回空目录)。
商机/投标产线入口的工作空间不能显示开发产线项目的空间
会话里残留的跨产线项目如元景项目不应劫持本产线的工作空间
pipeline_id 为空时不做隔离向后兼容旧调用
"""
if not pipeline_id:
return await get_project_dir(sor, uid, session_id)
pid = await get_session_project_id(sor, uid, session_id)
if pid:
try:
r = await sor.sqlExe(
"SELECT pipeline_id FROM sd_projects WHERE id=${p}$ LIMIT 1",
{"p": pid})
if r:
proj_pl = getattr(r[0], 'pipeline_id', '') or ''
if proj_pl != pipeline_id:
# 跨产线项目:视为本产线无项目(与 gateway 的隔离一致)
return '', await get_workspace_base(sor)
except Exception:
pass
return await get_project_dir(sor, uid, session_id)
async def get_project_apps_modules(sor, uid, session_id=''):
"""读项目目录下 {应用名}_spec.json返回 (apps, modules)。
@ -488,6 +513,7 @@ def load_workspace():
g.get_workspace_path = get_workspace_path
g.get_space_dir = get_space_dir
g.get_project_dir = get_project_dir
g.get_project_dir_pl = get_project_dir_pl
g.get_project_apps_modules = get_project_apps_modules
g.get_session_project_id = get_session_project_id
g.get_session_context = get_session_context