fix: 修复角色列表排序问题

pull/9733/head
Bai 2023-02-23 19:38:40 +08:00 committed by Jiangjie.Bai
parent b3851adfe7
commit 9b852f8b35
1 changed files with 12 additions and 6 deletions

View File

@ -18,11 +18,11 @@ __all__ = [
class RoleViewSet(JMSModelViewSet): class RoleViewSet(JMSModelViewSet):
queryset = Role.objects.all() queryset = Role.objects.all()
ordering = ('-builtin', 'scope', 'name')
serializer_classes = { serializer_classes = {
'default': RoleSerializer, 'default': RoleSerializer,
'users': RoleUserSerializer, 'users': RoleUserSerializer,
} }
ordering = ('-builtin', 'name')
filterset_class = RoleFilter filterset_class = RoleFilter
search_fields = ('name', 'scope', 'builtin') search_fields = ('name', 'scope', 'builtin')
rbac_perms = { rbac_perms = {
@ -56,11 +56,15 @@ class RoleViewSet(JMSModelViewSet):
return return
instance.permissions.set(clone.get_permissions()) instance.permissions.set(clone.get_permissions())
@staticmethod def filter_queryset(self, queryset):
def set_users_amount(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] 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 org_id = current_org.id
q = Q(role__scope=Role.Scope.system) | Q(role__scope=Role.Scope.org, org_id=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')) 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 perm_model = SystemRole
def get_queryset(self): def get_queryset(self):
return super().get_queryset().filter(scope='system') qs = super().get_queryset().filter(scope='system')
return qs
class OrgRoleViewSet(RoleViewSet): class OrgRoleViewSet(RoleViewSet):
perm_model = OrgRole perm_model = OrgRole
def get_queryset(self): def get_queryset(self):
return super().get_queryset().filter(scope='org') qs = super().get_queryset().filter(scope='org')
return qs
class BaseRolePermissionsViewSet(PermissionViewSet): class BaseRolePermissionsViewSet(PermissionViewSet):