From 5794715b1cefd655f00204d2cd6485ce25f5af0f Mon Sep 17 00:00:00 2001 From: wxg0103 <727495428@qq.com> Date: Thu, 15 Oct 2026 09:45:17 +0800 Subject: [PATCH] fix: add shared tool read permission functionality --- apps/tools/views/tool.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/apps/tools/views/tool.py b/apps/tools/views/tool.py index cbbb0cb87b5..79ce5d6ca80 100644 --- a/apps/tools/views/tool.py +++ b/apps/tools/views/tool.py @@ -2,6 +2,7 @@ from common.auth import TokenAuth from common.auth.authentication import check_batch_permissions, has_permissions from common.constants.permission_constants import CompareConstants, PermissionConstants, RoleConstants, ViewPermission +from common.database_model_manage.database_model_manage import DatabaseModelManage from common.log.log import log from django.db.models import QuerySet from django.utils.translation import gettext_lazy as _ @@ -29,6 +30,20 @@ from tools.serializers.tool import ToolBatchOperateSerializer, ToolSerializer, ToolTreeSerializer +def get_shared_tool_read_permission(request, kwargs): + get_authorized_tool = DatabaseModelManage.get_model("get_authorized_tool") + if get_authorized_tool is None: + return None + shared_tool_query_set = QuerySet(Tool).filter(id=kwargs.get("tool_id"), scope=ToolScope.SHARED) + if get_authorized_tool(shared_tool_query_set, kwargs.get("workspace_id")).exists(): + return ViewPermission( + [RoleConstants.USER.get_workspace_role(), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()], + [PermissionConstants.TOOL_READ.get_workspace_permission()], + CompareConstants.OR, + ) + return None + + def get_tool_operation_object(tool_id): tool_model = QuerySet(model=Tool).filter(id=tool_id).first() if tool_model is not None: @@ -176,6 +191,7 @@ def put(self, request: Request, workspace_id: str, tool_id: str): tags=[_("Tool")], # type: ignore ) @has_permissions( + get_shared_tool_read_permission, PermissionConstants.TOOL_READ.get_workspace_tool_permission(), PermissionConstants.TOOL_READ.get_workspace_permission_workspace_manage_role(), RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),