fix: 修复角色过滤失败

pull/8084/head
feng626 2022-04-18 14:52:41 +08:00 committed by Jiangjie.Bai
parent fe47e40588
commit 7b2d51f343
2 changed files with 28 additions and 2 deletions

View File

@ -4,6 +4,7 @@ from rest_framework.exceptions import PermissionDenied
from rest_framework.decorators import action from rest_framework.decorators import action
from common.drf.api import JMSModelViewSet from common.drf.api import JMSModelViewSet
from ..filters import RoleFilter
from ..serializers import RoleSerializer, RoleUserSerializer from ..serializers import RoleSerializer, RoleUserSerializer
from ..models import Role, SystemRole, OrgRole from ..models import Role, SystemRole, OrgRole
from .permission import PermissionViewSet from .permission import PermissionViewSet
@ -20,8 +21,8 @@ class RoleViewSet(JMSModelViewSet):
'default': RoleSerializer, 'default': RoleSerializer,
'users': RoleUserSerializer, 'users': RoleUserSerializer,
} }
filterset_fields = ['name', 'scope', 'builtin'] filterset_class = RoleFilter
search_fields = filterset_fields search_fields = ('name', 'scope', 'builtin')
rbac_perms = { rbac_perms = {
'users': 'rbac.view_rolebinding' 'users': 'rbac.view_rolebinding'
} }

25
apps/rbac/filters.py Normal file
View File

@ -0,0 +1,25 @@
from django_filters import rest_framework as filters
from common.drf.filters import BaseFilterSet
from rbac.models import Role
class RoleFilter(BaseFilterSet):
name = filters.CharFilter(method='filter_name')
class Meta:
model = Role
fields = ('name', 'scope', 'builtin')
@staticmethod
def filter_name(queryset, name, value):
builtin_ids = []
for role in queryset.filter(builtin=True):
if value in role.display_name:
builtin_ids.append(role.id)
if builtin_ids:
builtin_qs = queryset.model.objects.filter(id__in=builtin_ids)
else:
builtin_qs = queryset.model.objects.none()
queryset = queryset.filter(name__icontains=value)
return queryset | builtin_qs