Skip to content

Commit 2e0a5d8

Browse files
committed
fix: add shared tool read permission functionality
1 parent 53a5d74 commit 2e0a5d8

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

‎apps/tools/views/tool.py‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from common.auth import TokenAuth
33
from common.auth.authentication import check_batch_permissions, has_permissions
44
from common.constants.permission_constants import CompareConstants, PermissionConstants, RoleConstants, ViewPermission
5+
from common.database_model_manage.database_model_manage import DatabaseModelManage
56
from common.log.log import log
67
from django.db.models import QuerySet
78
from django.utils.translation import gettext_lazy as _
@@ -29,6 +30,20 @@
2930
from tools.serializers.tool import ToolBatchOperateSerializer, ToolSerializer, ToolTreeSerializer
3031

3132

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+
3247
def get_tool_operation_object(tool_id):
3348
tool_model = QuerySet(model=Tool).filter(id=tool_id).first()
3449
if tool_model is not None:
@@ -176,6 +191,7 @@ def put(self, request: Request, workspace_id: str, tool_id: str):
176191
tags=[_("Tool")], # type: ignore
177192
)
178193
@has_permissions(
194+
get_shared_tool_read_permission,
179195
PermissionConstants.TOOL_READ.get_workspace_tool_permission(),
180196
PermissionConstants.TOOL_READ.get_workspace_permission_workspace_manage_role(),
181197
RoleConstants.WORKSPACE_MANAGE.get_workspace_role(),

0 commit comments

Comments
 (0)