diff --git a/backend/apps/chat/task/llm.py b/backend/apps/chat/task/llm.py index 56250aa0..f17f601a 100644 --- a/backend/apps/chat/task/llm.py +++ b/backend/apps/chat/task/llm.py @@ -11,7 +11,7 @@ import requests from langchain.chat_models.base import BaseChatModel from langchain_community.utilities import SQLDatabase from langchain_core.messages import BaseMessage, SystemMessage, HumanMessage, AIMessage, BaseMessageChunk -from sqlalchemy import and_, cast +from sqlalchemy import and_, cast, or_ from sqlalchemy import select from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.orm import load_only @@ -489,7 +489,8 @@ class LLMService: # check permission and user in same rules obj = self.session.query(DsRules).filter( and_(DsRules.permission_list.op('@>')(cast([permission.id], JSONB)), - DsRules.user_list.op('@>')(cast([self.current_user.id], JSONB))) + or_(DsRules.user_list.op('@>')(cast([f'{self.current_user.id}'], JSONB)), + DsRules.user_list.op('@>')(cast([self.current_user.id], JSONB)))) ).first() if obj is not None: res.append(transRecord2DTO(self.session, permission)) diff --git a/backend/apps/datasource/crud/datasource.py b/backend/apps/datasource/crud/datasource.py index da6d2918..d60a173e 100644 --- a/backend/apps/datasource/crud/datasource.py +++ b/backend/apps/datasource/crud/datasource.py @@ -3,7 +3,7 @@ import json from typing import List from fastapi import HTTPException -from sqlalchemy import and_, text, cast +from sqlalchemy import and_, text, cast, or_ from sqlalchemy.dialects.postgresql import JSONB from sqlbot_xpack.permissions.models.ds_permission import DsPermission from sqlbot_xpack.permissions.models.ds_rules import DsRules @@ -295,7 +295,8 @@ def get_table_obj_by_ds(session: SessionDep, current_user: CurrentUser, ds: Core # check permission and user in same rules obj = session.query(DsRules).filter( and_(DsRules.permission_list.op('@>')(cast([permission.id], JSONB)), - DsRules.user_list.op('@>')(cast([current_user.id], JSONB))) + or_(DsRules.user_list.op('@>')(cast([f'{current_user.id}'], JSONB)), + DsRules.user_list.op('@>')(cast([current_user.id], JSONB)))) ).first() if obj is not None: permission_list = json.loads(permission.permissions) diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 1c69d48e..ef279bc8 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -36,7 +36,7 @@ dependencies = [ "pyyaml (>=6.0.2,<7.0.0)", "fastapi-mcp (>=0.3.4,<0.4.0)", "tabulate>=0.9.0", - "sqlbot-xpack==0.0.3.5", + "sqlbot-xpack==0.0.3.6", "fastapi-cache2>=0.2.2", "sqlparse>=0.5.3", ]