|
2 | 2 | from common.auth import TokenAuth |
3 | 3 | from common.auth.authentication import check_batch_permissions, has_permissions |
4 | 4 | from common.constants.permission_constants import CompareConstants, PermissionConstants, RoleConstants, ViewPermission |
| 5 | +from common.database_model_manage.database_model_manage import DatabaseModelManage |
5 | 6 | from common.log.log import log |
6 | 7 | from django.db.models import QuerySet |
7 | 8 | from django.utils.translation import gettext_lazy as _ |
|
29 | 30 | from tools.serializers.tool import ToolBatchOperateSerializer, ToolSerializer, ToolTreeSerializer |
30 | 31 |
|
31 | 32 |
|
| 33 | +def get_shared_tool_read_permission(request, kwargs): |
| 34 | + get_authorized_tool = DatabaseModelManage.get_model("get_authorized_tool") |
| 35 | + if get_authorized_tool is None: |
| 36 | + return None |
| 37 | + shared_tool_query_set = QuerySet(Tool).filter(id=kwargs.get("tool_id"), scope=ToolScope.SHARED) |
| 38 | + if get_authorized_tool(shared_tool_query_set, kwargs.get("workspace_id")).exists(): |
| 39 | + return ViewPermission( |
| 40 | + [RoleConstants.USER.get_workspace_role(), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()], |
| 41 | + [PermissionConstants.TOOL_READ.get_workspace_permission()], |
| 42 | + CompareConstants.OR, |
| 43 | + ) |
| 44 | + return None |
| 45 | + |
| 46 | + |
32 | 47 | def get_tool_operation_object(tool_id): |
33 | 48 | tool_model = QuerySet(model=Tool).filter(id=tool_id).first() |
34 | 49 | if tool_model is not None: |
@@ -176,6 +191,7 @@ def put(self, request: Request, workspace_id: str, tool_id: str): |
176 | 191 | tags=[_("Tool")], # type: ignore |
177 | 192 | ) |
178 | 193 | @has_permissions( |
| 194 | + get_shared_tool_read_permission, |
179 | 195 | PermissionConstants.TOOL_READ.get_workspace_tool_permission(), |
180 | 196 | PermissionConstants.TOOL_READ.get_workspace_permission_workspace_manage_role(), |
181 | 197 | RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), |
|
0 commit comments