perf: user filter (#9413)

Co-authored-by: feng <1304903146@qq.com>
This commit is contained in:
fit2bot 2023-02-02 16:40:00 +08:00 committed by GitHub
parent 64e48712a5
commit be151523f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,12 +6,8 @@ from rbac.models import Role
class UserFilter(BaseFilterSet): class UserFilter(BaseFilterSet):
system_roles = filters.ModelChoiceFilter( system_roles = filters.CharFilter(method='filter_system_roles')
queryset=Role.objects.filter(scope='system'), method='filter_system_roles' org_roles = filters.CharFilter(method='filter_org_roles')
)
org_roles = filters.ModelChoiceFilter(
queryset=Role.objects.filter(scope='org'), method='filter_org_roles'
)
class Meta: class Meta:
model = User model = User
@ -22,16 +18,18 @@ class UserFilter(BaseFilterSet):
@staticmethod @staticmethod
def filter_system_roles(queryset, name, value): def filter_system_roles(queryset, name, value):
queryset = queryset.prefetch_related('role_bindings')\ queryset = queryset.prefetch_related('role_bindings') \
.filter(role_bindings__role_id=value.id)\ .filter(
.distinct() role_bindings__role__name=value,
role_bindings__role__scope='system'
).distinct()
return queryset return queryset
@staticmethod @staticmethod
def filter_org_roles(queryset, name, value): def filter_org_roles(queryset, name, value):
queryset = queryset.prefetch_related('role_bindings') \ queryset = queryset.prefetch_related('role_bindings') \
.filter(role_bindings__role_id=value.id) \ .filter(
.distinct() role_bindings__role__name=value,
role_bindings__role__scope='org'
).distinct()
return queryset return queryset