diff --git a/apps/users/serializers/user.py b/apps/users/serializers/user.py index 4debf9633..43dc1dd36 100644 --- a/apps/users/serializers/user.py +++ b/apps/users/serializers/user.py @@ -416,6 +416,34 @@ class UserManageSerializer(serializers.Serializer): users = User.objects.filter(id__in=user_ids).values('id', 'nick_name') return list(users) + def get_user_members(self, workspace_id): + """ + 获取工作空间成员列表 + :param workspace_id: 工作空间ID + :return: 成员列表 + """ + role_model = DatabaseModelManage.get_model("role_model") + user_role_relation_model = DatabaseModelManage.get_model("workspace_user_role_mapping") + + if user_role_relation_model and role_model: + user_role_relations = ( + user_role_relation_model.objects + .filter(workspace_id=workspace_id) + .exclude(role__id='workspace_admin') + .select_related('role', 'user') # 预加载外键数据 + .distinct('user_id') + ) + return [ + { + 'id': relation.user.id, + 'nick_name': relation.user.nick_name, + 'email': relation.user.email, + 'role': relation.role.name + } + for relation in user_role_relations + ] + return [] + class BatchDelete(serializers.Serializer): ids = serializers.ListField(required=True, label=_('User IDs')) diff --git a/apps/users/urls.py b/apps/users/urls.py index 81edb9886..d1b500905 100644 --- a/apps/users/urls.py +++ b/apps/users/urls.py @@ -16,6 +16,8 @@ urlpatterns = [ path("user/current/reset_password", views.ResetCurrentUserPasswordView.as_view(), name="reset_password_current"), path('workspace//user_list', views.WorkspaceUserListView.as_view(), name="test_workspace_id_permission"), + path('workspace//user_member',views.WorkspaceUserMemberView.as_view(), + name="test_workspace_id_permission"), path('workspace//user/profile', views.TestWorkspacePermissionUserView.as_view(), name="test_workspace_id_permission"), path("user_manage", views.UserManage.as_view(), name="user_manage"), diff --git a/apps/users/views/user.py b/apps/users/views/user.py index b99bc224b..7e239e1db 100644 --- a/apps/users/views/user.py +++ b/apps/users/views/user.py @@ -110,6 +110,20 @@ class WorkspaceUserListView(APIView): return result.success(UserManageSerializer().get_user_list(workspace_id)) +class WorkspaceUserMemberView(APIView): + authentication_classes = [TokenAuth] + + @extend_schema(methods=['GET'], + summary=_("Get user member under workspace"), + description=_("Get user member under workspace"), + operation_id=_("Get user member under workspace"), # type: ignore + tags=[_("User Management")], # type: ignore + parameters=WorkspaceUserAPI.get_parameters(), + responses=WorkspaceUserAPI.get_response()) + def get(self, request: Request, workspace_id): + return result.success(UserManageSerializer().get_user_members(workspace_id)) + + class UserManage(APIView): authentication_classes = [TokenAuth]