From 74d7b80da61e9ca00a1824408eb5844cc7855809 Mon Sep 17 00:00:00 2001 From: GuoQing Zhang Date: Thu, 18 Sep 2025 15:16:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20qa=E7=9F=A5=E8=AF=86=E5=BA=93=E7=9A=84?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E6=93=8D=E4=BD=9C=E5=8A=A0=E4=B8=8A=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bisheng/api/services/knowledge_imp.py | 7 ++--- src/backend/bisheng/api/v1/knowledge.py | 26 ++++++++++++++++++- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/backend/bisheng/api/services/knowledge_imp.py b/src/backend/bisheng/api/services/knowledge_imp.py index 0cdce9380..07fcae327 100644 --- a/src/backend/bisheng/api/services/knowledge_imp.py +++ b/src/backend/bisheng/api/services/knowledge_imp.py @@ -1046,17 +1046,14 @@ def add_qa(db_knowledge: Knowledge, data: QAKnowledgeUpsert) -> QAKnowledge: raise e -def qa_status_change(qa_id: int, target_status: int): +def qa_status_change(qa_db: QAKnowledge, target_status: int, db_knowledge: Knowledge): """QA 状态切换""" - qa_db = QAKnoweldgeDao.get_qa_knowledge_by_primary_id(qa_id) if qa_db.status == target_status: logger.info("qa status is same, skip") return - - db_knowledge = KnowledgeDao.query_by_id(qa_db.knowledge_id) if target_status == QAStatus.DISABLED.value: - delete_vector_data(db_knowledge, [qa_id]) + delete_vector_data(db_knowledge, [qa_db.id]) qa_db.status = target_status QAKnoweldgeDao.update(qa_db) else: diff --git a/src/backend/bisheng/api/v1/knowledge.py b/src/backend/bisheng/api/v1/knowledge.py index 281d6bb4a..d508fd784 100644 --- a/src/backend/bisheng/api/v1/knowledge.py +++ b/src/backend/bisheng/api/v1/knowledge.py @@ -354,6 +354,10 @@ async def qa_add(*, QACreate: QAKnowledgeUpsert, db_knowledge = KnowledgeDao.query_by_id(QACreate.knowledge_id) if db_knowledge.type != KnowledgeTypeEnum.QA.value: raise HTTPException(status_code=404, detail='知识库类型错误') + if not login_user.access_check( + db_knowledge.user_id, str(db_knowledge.id), AccessType.KNOWLEDGE_WRITE + ): + raise UnAuthorizedError.http_exception() db_q = QAKnoweldgeDao.get_qa_knowledge_by_name(QACreate.questions, QACreate.knowledge_id, exclude_id=QACreate.id) # create repeat question or update @@ -370,7 +374,16 @@ def qa_status_switch(*, id: int = Body(embed=True), login_user: UserPayload = Depends(get_login_user)): """ 修改知识库信息. """ - new_qa_db = knowledge_imp.qa_status_change(id, status) + qa_db = QAKnoweldgeDao.get_qa_knowledge_by_primary_id(id) + if qa_db.status == status: + return resp_200() + db_knowledge = KnowledgeDao.query_by_id(qa_db.knowledge_id) + if not login_user.access_check( + db_knowledge.user_id, str(db_knowledge.id), AccessType.KNOWLEDGE_WRITE + ): + raise UnAuthorizedError.http_exception() + + new_qa_db = knowledge_imp.qa_status_change(qa_db, status, db_knowledge) if not new_qa_db: return resp_200() if new_qa_db.status != status: @@ -397,6 +410,12 @@ def qa_append( """ 增加知识库信息. """ QA_list = QAKnoweldgeDao.select_list(ids) knowledge = KnowledgeDao.query_by_id(QA_list[0].knowledge_id) + # check knowledge access + if not login_user.access_check( + knowledge.user_id, str(knowledge.id), AccessType.KNOWLEDGE_WRITE + ): + raise UnAuthorizedError.http_exception() + for q in QA_list: if question in q.questions: raise KnowledgeQAError.http_exception() @@ -706,6 +725,11 @@ def update_knowledge_model(*, if not knowledge: return resp_501(message="指定的知识库不存在") + if not login_user.access_check( + knowledge.user_id, str(knowledge.id), AccessType.KNOWLEDGE_WRITE + ): + raise UnAuthorizedError.http_exception() + old_model_id = knowledge.model # 更新知识库状态和模型