From a0d48da406e979616e3a14c0779fced74f19d8a7 Mon Sep 17 00:00:00 2001 From: zhangzhanwei Date: Mon, 22 Dec 2025 14:38:54 +0800 Subject: [PATCH] feat: Add folder permission by role --- apps/common/constants/permission_constants.py | 19 +++++++++++++-- apps/folders/views/folder.py | 12 +++++----- ui/src/components/folder-tree/index.vue | 4 ++-- .../resource-authorization-drawer/index.vue | 23 +++++++++++-------- ui/src/permission/application/workspace.ts | 18 +++++++-------- ui/src/permission/knowledge/workspace.ts | 16 ++++++------- ui/src/permission/tool/workspace.ts | 16 ++++++------- ui/src/utils/permission/data.ts | 11 +++++++++ .../component/PermissionTable.vue | 2 +- 9 files changed, 76 insertions(+), 45 deletions(-) diff --git a/apps/common/constants/permission_constants.py b/apps/common/constants/permission_constants.py index 647e881b0..6fbe11472 100644 --- a/apps/common/constants/permission_constants.py +++ b/apps/common/constants/permission_constants.py @@ -572,7 +572,12 @@ class PermissionConstants(Enum): resource_permission_group_list=[ResourcePermissionConst.TOOL_MANGE] ) TOOL_FOLDER_DELETE = Permission( - group=Group.TOOL_FOLDER, operate=Operate.EDIT, role_list=[RoleConstants.ADMIN, RoleConstants.USER], + group=Group.TOOL_FOLDER, operate=Operate.DELETE, role_list=[RoleConstants.ADMIN, RoleConstants.USER], + parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], + resource_permission_group_list=[ResourcePermissionConst.TOOL_MANGE] + ) + TOOL_FOLDER_AUTH = Permission( + group=Group.TOOL_FOLDER, operate=Operate.AUTH, role_list=[RoleConstants.ADMIN, RoleConstants.USER], parent_group=[WorkspaceGroup.TOOL, UserGroup.TOOL], resource_permission_group_list=[ResourcePermissionConst.TOOL_MANGE] ) @@ -641,6 +646,11 @@ class PermissionConstants(Enum): resource_permission_group_list=[ResourcePermissionConst.KNOWLEDGE_MANGE], parent_group=[WorkspaceGroup.KNOWLEDGE, UserGroup.KNOWLEDGE] ) + KNOWLEDGE_FOLDER_AUTH = Permission( + group=Group.KNOWLEDGE_FOLDER, operate=Operate.AUTH, role_list=[RoleConstants.ADMIN, RoleConstants.USER], + resource_permission_group_list=[ResourcePermissionConst.KNOWLEDGE_MANGE], + parent_group=[WorkspaceGroup.KNOWLEDGE, UserGroup.KNOWLEDGE] + ) KNOWLEDGE_WORKFLOW_READ = Permission( group=Group.KNOWLEDGE_WORKFLOW, operate=Operate.READ, role_list=[RoleConstants.ADMIN, RoleConstants.USER], resource_permission_group_list=[ResourcePermissionConst.KNOWLEDGE_VIEW], @@ -954,7 +964,7 @@ class PermissionConstants(Enum): parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], resource_permission_group_list=[ResourcePermissionConst.APPLICATION_VIEW] ) - APPLICATION_FOLDER_CREATE = Permission(group=Group.APPLICATION_FOLDER, operate=Operate.EDIT, + APPLICATION_FOLDER_CREATE = Permission(group=Group.APPLICATION_FOLDER, operate=Operate.CREATE, role_list=[RoleConstants.ADMIN, RoleConstants.USER], parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE] @@ -969,6 +979,11 @@ class PermissionConstants(Enum): parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE] ) + APPLICATION_FOLDER_AUTH = Permission(group=Group.APPLICATION_FOLDER, operate=Operate.AUTH, + role_list=[RoleConstants.ADMIN, RoleConstants.USER], + parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], + resource_permission_group_list=[ResourcePermissionConst.APPLICATION_MANGE] + ) APPLICATION_OVERVIEW_READ = Permission(group=Group.APPLICATION_OVERVIEW, operate=Operate.READ, role_list=[RoleConstants.ADMIN, RoleConstants.USER], parent_group=[WorkspaceGroup.APPLICATION, UserGroup.APPLICATION], diff --git a/apps/folders/views/folder.py b/apps/folders/views/folder.py index c172ff435..9a6319f92 100644 --- a/apps/folders/views/folder.py +++ b/apps/folders/views/folder.py @@ -38,9 +38,9 @@ class FolderView(APIView): tags=[_('Folder')] # type: ignore ) @has_permissions( - lambda r, kwargs: Permission(group=Group(f"{kwargs.get('source')}_FOLDER"), operate=Operate.EDIT, + lambda r, kwargs: Permission(group=Group(f"{kwargs.get('source')}_FOLDER"), operate=Operate.CREATE, resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('source')}/{r.data.get('parent_id')}"), - lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.CREATE, + lambda r, kwargs: Permission(group=Group(f"{kwargs.get('source')}_FOLDER"), operate=Operate.CREATE, resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}:ROLE/WORKSPACE_MANAGE" ), lambda r, kwargs: ViewPermission([RoleConstants.USER.get_workspace_role()], @@ -99,7 +99,7 @@ class FolderView(APIView): tags=[_('Folder')] # type: ignore ) @has_permissions( - lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.EDIT, + lambda r, kwargs: Permission(group=Group(f"{kwargs.get('source')}_FOLDER"), operate=Operate.EDIT, resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}:ROLE/WORKSPACE_MANAGE" ), lambda r, kwargs: Permission(group=Group(f"{kwargs.get('source')}_FOLDER"), operate=Operate.EDIT, @@ -151,15 +151,15 @@ class FolderView(APIView): tags=[_('Folder')] # type: ignore ) @has_permissions( - lambda r, kwargs: Permission(group=Group(kwargs.get('source')), operate=Operate.DELETE, + lambda r, kwargs: Permission(group=Group(f"{kwargs.get('source')}_FOLDER"), operate=Operate.DELETE, resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}:ROLE/WORKSPACE_MANAGE" ), - lambda r, kwargs: Permission(group=Group(f"{kwargs.get('source')}_FOLDER"), operate=Operate.EDIT, + lambda r, kwargs: Permission(group=Group(f"{kwargs.get('source')}_FOLDER"), operate=Operate.DELETE, resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('source')}/{kwargs.get('folder_id')}" ), lambda r, kwargs: ViewPermission([RoleConstants.USER.get_workspace_role()], [Permission(group=Group(f"{kwargs.get('source')}_FOLDER"), - operate=Operate.EDIT, + operate=Operate.DELETE, resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('source')}/{kwargs.get('folder_id')}" )], CompareConstants.AND), RoleConstants.WORKSPACE_MANAGE.get_workspace_role() diff --git a/ui/src/components/folder-tree/index.vue b/ui/src/components/folder-tree/index.vue index f50790fa5..095179593 100644 --- a/ui/src/components/folder-tree/index.vue +++ b/ui/src/components/folder-tree/index.vue @@ -80,7 +80,7 @@ class="flex align-center w-full custom-tree-node" > - {{ i18n_name(node.label) }} + {{ i18n_name(node.label) }}
- + - + + +