fix(knowledge-tool): 修复使用的 ID 而不是知识库的 bug

This commit is contained in:
Wenjie Zhang 2026-01-22 02:16:08 +08:00
parent e585f796d2
commit f5fedb4dec

View File

@ -283,27 +283,27 @@ async def save_agent_config(
from src import knowledge_base from src import knowledge_base
if "knowledges" in config and config["knowledges"]: if "knowledges" in config and config["knowledges"]:
# 获取用户有权访问的知识库 ID # 获取用户有权访问的知识库名称
try: try:
user_info = {"role": current_user.role, "department_id": current_user.department_id} user_info = {"role": current_user.role, "department_id": current_user.department_id}
accessible_databases = await knowledge_base.get_databases_by_user(user_info) accessible_databases = await knowledge_base.get_databases_by_user(user_info)
accessible_db_ids = { accessible_kb_names = {
db.get("db_id") for db in accessible_databases.get("databases", []) if db.get("db_id") db.get("name") for db in accessible_databases.get("databases", []) if db.get("name")
} }
except Exception as db_error: except Exception as db_error:
logger.warning(f"获取知识库列表失败: {db_error}") logger.warning(f"获取知识库列表失败: {db_error}")
# 如果获取失败superadmin 可以访问所有,非 superadmin 无法访问任何 # 如果获取失败superadmin 可以访问所有,非 superadmin 无法访问任何
if current_user.role != "superadmin": if current_user.role != "superadmin":
raise HTTPException(status_code=500, detail="无法获取知识库列表") raise HTTPException(status_code=500, detail="无法获取知识库列表")
# 回退:获取所有数据库 ID # 回退:获取所有数据库名称
from src.repositories.knowledge_base_repository import KnowledgeBaseRepository from src.repositories.knowledge_base_repository import KnowledgeBaseRepository
kb_repo = KnowledgeBaseRepository() kb_repo = KnowledgeBaseRepository()
rows = await kb_repo.get_all() rows = await kb_repo.get_all()
accessible_db_ids = {row.db_id for row in rows} accessible_kb_names = {row.name for row in rows if row.name}
# 检查配置中的知识库是否都可用 # 检查配置中的知识库是否都可用
invalid_kbs = [kb for kb in config["knowledges"] if kb not in accessible_db_ids] invalid_kbs = [kb for kb in config["knowledges"] if kb not in accessible_kb_names]
if invalid_kbs: if invalid_kbs:
raise HTTPException(status_code=403, detail=f"无权访问以下知识库: {', '.join(invalid_kbs)}") raise HTTPException(status_code=403, detail=f"无权访问以下知识库: {', '.join(invalid_kbs)}")
# === 校验结束 === # === 校验结束 ===