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 common.drf.api import JMSModelViewSet
from ..filters import RoleFilter
from ..serializers import RoleSerializer, RoleUserSerializer
from ..models import Role, SystemRole, OrgRole
from .permission import PermissionViewSet
@ -20,8 +21,8 @@ class RoleViewSet(JMSModelViewSet):
'default': RoleSerializer,
'users': RoleUserSerializer,
}
filterset_fields = ['name', 'scope', 'builtin']
search_fields = filterset_fields
filterset_class = RoleFilter
search_fields = ('name', 'scope', 'builtin')
rbac_perms = {
'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