feat(Model Configuration): Supported Authorized Space

This commit is contained in:
ulleo
2026-06-04 14:38:00 +08:00
committed by ulleo
parent 9b72922949
commit c53ac8f720
3 changed files with 92 additions and 0 deletions
+2
View File
@@ -96,6 +96,8 @@
"custom_model": "Custom Model",
"system_model_ws_mapping": "Query Model-Workspace Authorization Relationships",
"system_model_ws_mapping_update": "Update Model-Workspace Authorization Relationships",
"system_model_ws_mapping_add": "Add Model-Workspace Authorization Relationships",
"system_model_ws_mapping_delete": "Delete Model-Workspace Authorization Relationships",
"system_model_list_by_ws": "Get Model List by Workspace",
"model_name": "Name",
"model_type": "Type",
+2
View File
@@ -96,6 +96,8 @@
"custom_model": "自定义模型",
"system_model_ws_mapping": "查询模型授权工作空间的关联关系",
"system_model_ws_mapping_update": "更新模型授权工作空间的关联关系",
"system_model_ws_mapping_add": "新增模型授权工作空间的关联关系",
"system_model_ws_mapping_delete": "删除模型授权工作空间的关联关系",
"system_model_list_by_ws": "根据工作空间获取模型列表",
"model_name": "名称",
"model_type": "类型",
+88
View File
@@ -264,6 +264,94 @@ async def update_model_ws_mapping_by_id(
return [str(ws_id) for ws_id in ws_ids]
# 新增映射(在已有基础上追加)
@router.post("/{id}/ws_mapping", response_model=List[str], summary=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_add",
description=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_add")
@require_permissions(permission=SqlbotPermission(role=['admin']))
async def add_model_ws_mapping_by_id(
session: SessionDep,
id: int = Path(description="ID"),
ws_ids: List[str] = Body(description="workspace id list"),
):
if ws_ids is None:
ws_ids = []
ws_ids = list({int(ws_id) for ws_id in ws_ids})
db_model = session.get(AiModelDetail, id)
if not db_model:
raise ValueError(f"AiModelDetail with id {id} not found")
# 查询已存在的映射,过滤掉重复的
existing_stmt = (
select(AiModelWorkspaceMapping.workspace_id)
.where(
AiModelWorkspaceMapping.ai_model_id == id,
AiModelWorkspaceMapping.workspace_id.in_(ws_ids),
)
)
existing_ws_ids = set(session.exec(existing_stmt).all())
# 只插入不存在的映射
new_ws_ids = [ws_id for ws_id in ws_ids if ws_id not in existing_ws_ids]
for ws_id in new_ws_ids:
session.add(
AiModelWorkspaceMapping(ai_model_id=id, workspace_id=ws_id)
)
session.commit()
# 返回完整的映射列表
all_stmt = (
select(AiModelWorkspaceMapping.workspace_id)
.where(AiModelWorkspaceMapping.ai_model_id == id)
.distinct()
)
all_ws_ids: List[int] = session.exec(all_stmt).all()
return [str(ws_id) for ws_id in all_ws_ids]
# 删除指定映射
@router.delete("/{id}/ws_mapping", response_model=List[str],
summary=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_delete",
description=f"{PLACEHOLDER_PREFIX}system_model_ws_mapping_delete")
@require_permissions(permission=SqlbotPermission(role=['admin']))
async def delete_model_ws_mapping_by_id(
session: SessionDep,
id: int = Path(description="ID"),
ws_ids: List[str] = Body(description="workspace id list"),
):
if ws_ids is None:
ws_ids = []
ws_ids = list({int(ws_id) for ws_id in ws_ids})
db_model = session.get(AiModelDetail, id)
if not db_model:
raise ValueError(f"AiModelDetail with id {id} not found")
# 只删除指定的映射
if ws_ids:
session.execute(
delete(AiModelWorkspaceMapping)
.where(
AiModelWorkspaceMapping.ai_model_id == id,
AiModelWorkspaceMapping.workspace_id.in_(ws_ids),
)
)
session.commit()
# 返回剩余的映射列表
stmt = (
select(AiModelWorkspaceMapping.workspace_id)
.where(AiModelWorkspaceMapping.ai_model_id == id)
.distinct()
)
remaining_ws_ids: List[int] = session.exec(stmt).all()
return [str(ws_id) for ws_id in remaining_ws_ids]
@router.get("/list/by_ws", response_model=List[AiModelBrief], summary=f"{PLACEHOLDER_PREFIX}system_model_list_by_ws",
description=f"{PLACEHOLDER_PREFIX}system_model_list_by_ws")
@require_permissions(permission=SqlbotPermission(role=['ws_admin']))