mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-07 10:20:57 +00:00
fix: 修复角色过滤失败
This commit is contained in:
@@ -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
25
apps/rbac/filters.py
Normal 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
|
Reference in New Issue
Block a user