refac
Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com>
This commit is contained in:
1 parent
7abe11346a
commit
4807866a1c
2 files changed
+76
-58
No files matched your search
@@ -71,11 +71,22 @@ async def get_tools(
|
||||
db: AsyncSession = Depends(get_async_session),
|
||||
):
|
||||
tools = []
|
||||
bypass_access_control = user.role == 'admin' and BYPASS_ADMIN_ACCESS_CONTROL
|
||||
user_group_ids = (
|
||||
set()
|
||||
if bypass_access_control
|
||||
else {group.id for group in await Groups.get_groups_by_member_id(user.id, db=db)}
|
||||
)
|
||||
|
||||
# Local Tools
|
||||
if ENABLE_PLUGINS:
|
||||
tools_cache = get_tools_cache(request)
|
||||
for tool in await Tools.get_tools(defer_content=True, db=db):
|
||||
for tool in await Tools.get_tools(
|
||||
defer_content=True,
|
||||
db=db,
|
||||
user_id=None if bypass_access_control else user.id,
|
||||
user_group_ids=user_group_ids,
|
||||
):
|
||||
tool_module = tools_cache.get(tool.id)
|
||||
has_user_valves = (
|
||||
hasattr(tool_module, 'UserValves')
|
||||
@@ -166,31 +177,19 @@ async def get_tools(
|
||||
)
|
||||
)
|
||||
|
||||
if not (user.role == 'admin' and BYPASS_ADMIN_ACCESS_CONTROL):
|
||||
user_group_ids = {group.id for group in await Groups.get_groups_by_member_id(user.id, db=db)}
|
||||
filtered_tools = []
|
||||
for tool in tools:
|
||||
if tool.user_id == user.id:
|
||||
filtered_tools.append(tool)
|
||||
elif str(tool.id).startswith('server:'):
|
||||
if await has_access(
|
||||
user.id,
|
||||
'read',
|
||||
server_access_grants.get(str(tool.id), []),
|
||||
user_group_ids,
|
||||
db=db,
|
||||
):
|
||||
filtered_tools.append(tool)
|
||||
elif await AccessGrants.has_access(
|
||||
user_id=user.id,
|
||||
resource_type='tool',
|
||||
resource_id=tool.id,
|
||||
permission='read',
|
||||
user_group_ids=user_group_ids,
|
||||
if not bypass_access_control:
|
||||
tools = [
|
||||
tool
|
||||
for tool in tools
|
||||
if not str(tool.id).startswith('server:')
|
||||
or await has_access(
|
||||
user.id,
|
||||
'read',
|
||||
server_access_grants.get(str(tool.id), []),
|
||||
user_group_ids,
|
||||
db=db,
|
||||
):
|
||||
filtered_tools.append(tool)
|
||||
tools = filtered_tools
|
||||
)
|
||||
]
|
||||
|
||||
if query:
|
||||
q = query.casefold()
|
||||
@@ -209,17 +208,23 @@ async def get_tool_list(user=Depends(get_verified_user), db: AsyncSession = Depe
|
||||
if not ENABLE_PLUGINS:
|
||||
return []
|
||||
|
||||
if user.role == 'admin' and BYPASS_ADMIN_ACCESS_CONTROL:
|
||||
tools = await Tools.get_tools(defer_content=True, db=db)
|
||||
else:
|
||||
tools = await Tools.get_tools_by_user_id(user.id, 'read', defer_content=True, db=db)
|
||||
|
||||
user_group_ids = {group.id for group in await Groups.get_groups_by_member_id(user.id, db=db)}
|
||||
bypass_access_control = user.role == 'admin' and BYPASS_ADMIN_ACCESS_CONTROL
|
||||
user_group_ids = (
|
||||
set()
|
||||
if bypass_access_control
|
||||
else {group.id for group in await Groups.get_groups_by_member_id(user.id, db=db)}
|
||||
)
|
||||
tools = await Tools.get_tools(
|
||||
defer_content=True,
|
||||
db=db,
|
||||
user_id=None if bypass_access_control else user.id,
|
||||
user_group_ids=user_group_ids,
|
||||
)
|
||||
|
||||
result = []
|
||||
for tool in tools:
|
||||
has_write = (
|
||||
(user.role == 'admin' and BYPASS_ADMIN_ACCESS_CONTROL)
|
||||
bypass_access_control
|
||||
or user.id == tool.user_id
|
||||
or any(
|
||||
g.permission == 'write'
|
||||
@@ -334,10 +339,11 @@ async def export_tools(
|
||||
detail=ERROR_MESSAGES.UNAUTHORIZED,
|
||||
)
|
||||
|
||||
if user.role == 'admin' and BYPASS_ADMIN_ACCESS_CONTROL:
|
||||
return await Tools.get_tools(db=db)
|
||||
else:
|
||||
return await Tools.get_tools_by_user_id(user.id, 'read', db=db)
|
||||
bypass_access_control = user.role == 'admin' and BYPASS_ADMIN_ACCESS_CONTROL
|
||||
return await Tools.get_tools(
|
||||
db=db,
|
||||
user_id=None if bypass_access_control else user.id,
|
||||
)
|
||||
|
||||
|
||||
############################
|
||||
|
||||
Reference in new issue
Block a user