mirror of https://github.com/jumpserver/jumpserver
fix: 修复角色过滤失败
parent
fe47e40588
commit
7b2d51f343
|
@ -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'
|
||||
}
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue