From 9b852f8b35a2ed0ea528683c9621ea0abe2e353a Mon Sep 17 00:00:00 2001 From: Bai Date: Thu, 23 Feb 2023 19:38:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8E=92=E5=BA=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/rbac/api/role.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/apps/rbac/api/role.py b/apps/rbac/api/role.py index bb74f1b1c..d59c42192 100644 --- a/apps/rbac/api/role.py +++ b/apps/rbac/api/role.py @@ -18,11 +18,11 @@ __all__ = [ class RoleViewSet(JMSModelViewSet): queryset = Role.objects.all() - ordering = ('-builtin', 'scope', 'name') serializer_classes = { 'default': RoleSerializer, 'users': RoleUserSerializer, } + ordering = ('-builtin', 'name') filterset_class = RoleFilter search_fields = ('name', 'scope', 'builtin') rbac_perms = { @@ -56,11 +56,15 @@ class RoleViewSet(JMSModelViewSet): return instance.permissions.set(clone.get_permissions()) - @staticmethod - def set_users_amount(queryset): + def filter_queryset(self, queryset): + queryset = super().filter_queryset(queryset) + queryset = queryset.order_by(*self.ordering) + return queryset + + def set_users_amount(self, queryset): """设置角色的用户绑定数量,以减少查询""" ids = [role.id for role in queryset] - queryset = Role.objects.filter(id__in=ids) + queryset = Role.objects.filter(id__in=ids).order_by(*self.ordering) org_id = current_org.id q = Q(role__scope=Role.Scope.system) | Q(role__scope=Role.Scope.org, org_id=org_id) role_bindings = RoleBinding.objects.filter(q).values_list('role_id').annotate(user_count=Count('user_id')) @@ -95,14 +99,16 @@ class SystemRoleViewSet(RoleViewSet): perm_model = SystemRole def get_queryset(self): - return super().get_queryset().filter(scope='system') + qs = super().get_queryset().filter(scope='system') + return qs class OrgRoleViewSet(RoleViewSet): perm_model = OrgRole def get_queryset(self): - return super().get_queryset().filter(scope='org') + qs = super().get_queryset().filter(scope='org') + return qs class BaseRolePermissionsViewSet(PermissionViewSet):