From 064258a29c02f9bc536806d5ff6ae0aba8464911 Mon Sep 17 00:00:00 2001 From: wxg0103 <727495428@qq.com> Date: Fri, 31 Jul 2026 14:36:39 +0800 Subject: [PATCH] feat: add user group authorization status management and related translations --- apps/locales/en_US/LC_MESSAGES/django.po | 9 +++ apps/locales/zh_CN/LC_MESSAGES/django.po | 9 +++ apps/locales/zh_Hant/LC_MESSAGES/django.po | 11 +++- .../views/user_group_resource_permission.py | 66 +++++++++---------- 4 files changed, 61 insertions(+), 34 deletions(-) diff --git a/apps/locales/en_US/LC_MESSAGES/django.po b/apps/locales/en_US/LC_MESSAGES/django.po index cc6efd8419a..c257ee61e7f 100644 --- a/apps/locales/en_US/LC_MESSAGES/django.po +++ b/apps/locales/en_US/LC_MESSAGES/django.po @@ -9441,4 +9441,13 @@ msgid "Add members to System User Group" msgstr "" msgid "Remove members from System User Group" +msgstr "" + +msgid "Get user group authorization status of resource" +msgstr "" + +msgid "Edit user group authorization status of resource" +msgstr "" + +msgid "Get user group authorization status of resource by page" msgstr "" \ No newline at end of file diff --git a/apps/locales/zh_CN/LC_MESSAGES/django.po b/apps/locales/zh_CN/LC_MESSAGES/django.po index 044c3329c0d..eb1d9855c1b 100644 --- a/apps/locales/zh_CN/LC_MESSAGES/django.po +++ b/apps/locales/zh_CN/LC_MESSAGES/django.po @@ -9566,3 +9566,12 @@ msgstr "添加成员到工作空间用户组" msgid "Remove members from Workspace User Group" msgstr "从工作空间用户组中移除成员" + +msgid "Get user group authorization status of resource" +msgstr "获取用户组对资源的授权状态" + +msgid "Edit user group authorization status of resource" +msgstr "编辑用户组对资源的授权状态" + +msgid "Get user group authorization status of resource by page" +msgstr "分页获取用户组对资源的授权状态" \ No newline at end of file diff --git a/apps/locales/zh_Hant/LC_MESSAGES/django.po b/apps/locales/zh_Hant/LC_MESSAGES/django.po index be9eb92b366..a9e3af27d45 100644 --- a/apps/locales/zh_Hant/LC_MESSAGES/django.po +++ b/apps/locales/zh_Hant/LC_MESSAGES/django.po @@ -9564,4 +9564,13 @@ msgid "Add members to Workspace User Group" msgstr "添加成員到工作空間用戶組" msgid "Remove members from Workspace User Group" -msgstr "從工作空間用戶組中移除成員" \ No newline at end of file +msgstr "從工作空間用戶組中移除成員" + +msgid "Get user group authorization status of resource" +msgstr "獲取用戶組對資源的授權狀態" + +msgid "Edit user group authorization status of resource" +msgstr "編輯用戶組對資源的授權狀態" + +msgid "Get user group authorization status of resource by page" +msgstr "分頁獲取用戶組對資源的授權狀態" \ No newline at end of file diff --git a/apps/system_manage/views/user_group_resource_permission.py b/apps/system_manage/views/user_group_resource_permission.py index d8a0bede6b3..2a71c4c654e 100644 --- a/apps/system_manage/views/user_group_resource_permission.py +++ b/apps/system_manage/views/user_group_resource_permission.py @@ -23,8 +23,6 @@ UserResourcePermissionPageAPI from system_manage.serializers.user_group_resource_permission import UserGroupResourcePermissionSerializer, \ ResourceUserGroupPermissionSerializer -from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer, \ - ResourceUserPermissionSerializer from users.models.user_group import SystemUserGroup @@ -49,7 +47,7 @@ class WorkSpaceUserGroupResourcePermissionView(APIView): tags=[_('Resources authorization')] # type: ignore ) @has_permissions( - lambda r, kwargs: Permission(group=Group(kwargs.get('resource') + '_WORKSPACE_USER_RESOURCE_PERMISSION'), + lambda r, kwargs: Permission(group=Group(kwargs.get('resource') + '_WORKSPACE_USER_GROUP_RESOURCE_PERMISSION'), operate=Operate.READ), RoleConstants.ADMIN, RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) def get(self, request: Request, workspace_id: str, user_group_id: str, resource: str): @@ -71,7 +69,7 @@ def get(self, request: Request, workspace_id: str, user_group_id: str, resource: get_operation_object=lambda r, k: get_user_operation_object(k.get('user_group_id')) ) @has_permissions( - lambda r, kwargs: Permission(group=Group(kwargs.get('resource') + '_WORKSPACE_USER_RESOURCE_PERMISSION'), + lambda r, kwargs: Permission(group=Group(kwargs.get('resource') + '_WORKSPACE_USER_GROUP_RESOURCE_PERMISSION'), operate=Operate.EDIT), RoleConstants.ADMIN, RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) def put(self, request: Request, workspace_id: str, user_group_id: str, resource: str): @@ -93,15 +91,15 @@ class Page(APIView): tags=[_('Resources authorization')] # type: ignore ) @has_permissions( - lambda r, kwargs: Permission(group=Group(kwargs.get('resource') + '_WORKSPACE_USER_RESOURCE_PERMISSION'), + lambda r, kwargs: Permission(group=Group(kwargs.get('resource') + '_WORKSPACE_USER_GROUP_RESOURCE_PERMISSION'), operate=Operate.READ), RoleConstants.ADMIN, RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) def get(self, request: Request, workspace_id: str, user_group_id: str, resource: str, current_page: str, page_size: str): return result.success(UserGroupResourcePermissionSerializer( data={'workspace_id': workspace_id, 'user_group_id': user_group_id, 'auth_target_type': resource} - ).page({'name': request.query_params.get('name'), - 'permission': request.query_params.getlist('permission[]')}, current_page, page_size, request.user)) + ).page({'name': request.query_params.get('name'), + 'permission': request.query_params.getlist('permission[]')}, current_page, page_size, request.user)) class WorkspaceResourceUserGroupPermissionView(APIView): @@ -109,9 +107,9 @@ class WorkspaceResourceUserGroupPermissionView(APIView): @extend_schema( methods=['GET'], - description=_('Get user authorization status of resource'), - summary=_('Get user authorization status of resource'), - operation_id=_('Get user authorization status of resource'), # type: ignore + description=_('Get user group authorization status of resource'), + summary=_('Get user group authorization status of resource'), + operation_id=_('Get user group authorization status of resource'), # type: ignore parameters=ResourceUserPermissionAPI.get_parameters(), responses=ResourceUserPermissionAPI.get_response(), tags=[_('Resources authorization')] # type: ignore @@ -122,16 +120,16 @@ class WorkspaceResourceUserGroupPermissionView(APIView): resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}:ROLE/WORKSPACE_MANAGE"), lambda r, kwargs: Permission(group=Group(kwargs.get('resource')), operate=Operate.AUTH, - resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER','')}/{kwargs.get('target')}"), + resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER', '')}/{kwargs.get('target')}"), ViewPermission([RoleConstants.USER.get_workspace_role()], - [lambda r, kwargs: Permission(group=Group(kwargs.get('resource').replace('_FOLDER','')), + [lambda r, kwargs: Permission(group=Group(kwargs.get('resource').replace('_FOLDER', '')), operate=Operate.SELF, - resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER','')}/{kwargs.get('target')}")], + resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER', '')}/{kwargs.get('target')}")], CompareConstants.AND), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) def get(self, request: Request, workspace_id: str, target: str, resource: str): return result.success(UserGroupResourcePermissionSerializer( - data={'workspace_id': workspace_id, "target": target, 'auth_target_type': resource.replace('_FOLDER',''), + data={'workspace_id': workspace_id, "target": target, 'auth_target_type': resource.replace('_FOLDER', ''), }).list( {'name': request.query_params.get("name"), 'permission': request.query_params.getlist("permission[]") @@ -139,15 +137,15 @@ def get(self, request: Request, workspace_id: str, target: str, resource: str): @extend_schema( methods=['PUT'], - description=_('Edit user authorization status of resource'), - summary=_('Edit user authorization status of resource'), - operation_id=_('Edit user authorization status of resource'), # type: ignore + description=_('Edit user group authorization status of resource'), + summary=_('Edit user group authorization status of resource'), + operation_id=_('Edit user group authorization status of resource'), # type: ignore parameters=ResourceUserPermissionEditAPI.get_parameters(), request=ResourceUserPermissionEditAPI.get_request(), responses=ResourceUserPermissionEditAPI.get_response(), tags=[_('Resources authorization')] # type: ignore ) - @log(menu='System', operate='Edit user authorization status of resource', + @log(menu='System', operate='Edit user group authorization status of resource', get_operation_object=lambda r, k: get_user_operation_object(k.get('user_id')) ) @has_permissions( @@ -156,16 +154,17 @@ def get(self, request: Request, workspace_id: str, target: str, resource: str): resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}:ROLE/WORKSPACE_MANAGE"), lambda r, kwargs: Permission(group=Group(kwargs.get('resource')), operate=Operate.AUTH, - resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER','')}/{kwargs.get('target')}"), + resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER', '')}/{kwargs.get('target')}"), ViewPermission([RoleConstants.USER.get_workspace_role()], - [lambda r, kwargs: Permission(group=Group(kwargs.get('resource').replace('_FOLDER','')), + [lambda r, kwargs: Permission(group=Group(kwargs.get('resource').replace('_FOLDER', '')), operate=Operate.SELF, - resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER','')}/{kwargs.get('target')}")], + resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER', '')}/{kwargs.get('target')}")], CompareConstants.AND), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) def put(self, request: Request, workspace_id: str, target: str, resource: str): return result.success(ResourceUserGroupPermissionSerializer( - data={'workspace_id': workspace_id, "target": target, 'auth_target_type': resource.replace('_FOLDER',''), }) + data={'workspace_id': workspace_id, "target": target, + 'auth_target_type': resource.replace('_FOLDER', ''), }) .edit(instance=request.data, current_user_id=request.user.id)) class Page(APIView): @@ -173,9 +172,9 @@ class Page(APIView): @extend_schema( methods=['GET'], - description=_('Get user authorization status of resource by page'), - summary=_('Get user authorization status of resource by page'), - operation_id=_('Get user authorization status of resource by page'), # type: ignore + description=_('Get user group authorization status of resource by page'), + summary=_('Get user group authorization status of resource by page'), + operation_id=_('Get user group authorization status of resource by page'), # type: ignore parameters=ResourceUserPermissionPageAPI.get_parameters(), responses=ResourceUserPermissionPageAPI.get_response(), tags=[_('Resources authorization')] # type: ignore @@ -184,19 +183,20 @@ class Page(APIView): lambda r, kwargs: Permission(group=Group(kwargs.get('resource')), operate=Operate.AUTH, resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}:ROLE/WORKSPACE_MANAGE"), - lambda r, kwargs: Permission(group=Group(kwargs.get('resource')), - operate=Operate.AUTH, - resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER','')}/{kwargs.get('target')}"), - ViewPermission([RoleConstants.USER.get_workspace_role()], - [lambda r, kwargs: Permission(group=Group(kwargs.get('resource').replace('_FOLDER','')), - operate=Operate.SELF, - resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER','')}/{kwargs.get('target')}")], + lambda r, kwargs: Permission(group=Group(kwargs.get('resource')), + operate=Operate.AUTH, + resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER', '')}/{kwargs.get('target')}"), + ViewPermission([RoleConstants.USER.get_workspace_role()], + [lambda r, kwargs: Permission(group=Group(kwargs.get('resource').replace('_FOLDER', '')), + operate=Operate.SELF, + resource_path=f"/WORKSPACE/{kwargs.get('workspace_id')}/{kwargs.get('resource').replace('_FOLDER', '')}/{kwargs.get('target')}")], CompareConstants.AND), RoleConstants.WORKSPACE_MANAGE.get_workspace_role()) def get(self, request: Request, workspace_id: str, target: str, resource: str, current_page: int, page_size: int): return result.success(ResourceUserGroupPermissionSerializer( - data={'workspace_id': workspace_id, "target": target, 'auth_target_type': resource.replace('_FOLDER',''), } + data={'workspace_id': workspace_id, "target": target, + 'auth_target_type': resource.replace('_FOLDER', ''), } ).page({'name': request.query_params.get("name"), 'permission': request.query_params.getlist("permission[]")}, current_page, page_size, ))