mirror of https://github.com/jumpserver/jumpserver
fix: 修复账号搜索问题
parent
2494418208
commit
898b51c593
|
@ -1,10 +1,12 @@
|
|||
from django.db.models import F
|
||||
from django.db.models import F, Q
|
||||
from django.conf import settings
|
||||
from rest_framework.decorators import action
|
||||
from django_filters import rest_framework as filters
|
||||
from rest_framework.response import Response
|
||||
|
||||
from orgs.mixins.api import OrgBulkModelViewSet
|
||||
from common.permissions import IsOrgAdmin, IsOrgAdminOrAppUser, NeedMFAVerify
|
||||
from common.drf.filters import BaseFilterSet
|
||||
from ..tasks.account_connectivity import test_accounts_connectivity_manual
|
||||
from ..models import AuthBook
|
||||
from .. import serializers
|
||||
|
@ -12,10 +14,38 @@ from .. import serializers
|
|||
__all__ = ['AccountViewSet', 'AccountSecretsViewSet']
|
||||
|
||||
|
||||
class AccountFilterSet(BaseFilterSet):
|
||||
username = filters.CharFilter(method='do_nothing')
|
||||
ip = filters.CharFilter(field_name='ip', lookup_expr='exact')
|
||||
hostname = filters.CharFilter(field_name='hostname', lookup_expr='exact')
|
||||
|
||||
@property
|
||||
def qs(self):
|
||||
qs = super().qs
|
||||
qs = self.filter_username(qs)
|
||||
return qs
|
||||
|
||||
def filter_username(self, qs):
|
||||
username = self.get_query_param('username')
|
||||
if not username:
|
||||
return qs
|
||||
qs = qs.filter(Q(username=username) | Q(systemuser__username=username)).distinct()
|
||||
return qs
|
||||
|
||||
class Meta:
|
||||
model = AuthBook
|
||||
fields = [
|
||||
'asset', 'systemuser', 'id',
|
||||
]
|
||||
|
||||
from rest_framework.filters import SearchFilter
|
||||
|
||||
|
||||
class AccountViewSet(OrgBulkModelViewSet):
|
||||
model = AuthBook
|
||||
filterset_fields = ("username", "asset", "systemuser")
|
||||
search_fields = filterset_fields
|
||||
filterset_fields = ("username", "asset", "systemuser", 'ip', 'hostname')
|
||||
search_fields = ('username', 'ip', 'hostname', 'systemuser__username')
|
||||
filterset_class = AccountFilterSet
|
||||
serializer_classes = {
|
||||
'default': serializers.AccountSerializer,
|
||||
'verify_account': serializers.AssetTaskSerializer
|
||||
|
|
|
@ -237,6 +237,12 @@ class Asset(AbsConnectivity, ProtocolsMixin, NodesRelationMixin, OrgModelMixin):
|
|||
raise ValidationError('System user should be type admin')
|
||||
system_user.assets.add(self)
|
||||
|
||||
@property
|
||||
def admin_user_display(self):
|
||||
if not self.admin_user:
|
||||
return ''
|
||||
return str(self.admin_user)
|
||||
|
||||
def remove_admin_user(self):
|
||||
from ..models import AuthBook
|
||||
AuthBook.objects.filter(asset=self, systemuser__type='admin').delete()
|
||||
|
|
|
@ -83,7 +83,7 @@ class AssetSerializer(BulkOrgResourceModelSerializer):
|
|||
'hardware_info', 'connectivity', 'date_verified'
|
||||
]
|
||||
fields_fk = [
|
||||
'domain', 'domain_display', 'platform', 'admin_user'
|
||||
'domain', 'domain_display', 'platform', 'admin_user', 'admin_user_display'
|
||||
]
|
||||
fields_m2m = [
|
||||
'nodes', 'nodes_display', 'labels',
|
||||
|
|
|
@ -234,7 +234,7 @@ class SystemUserSimpleSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class RelationMixin(BulkSerializerMixin, serializers.Serializer):
|
||||
systemuser_display = serializers.ReadOnlyField()
|
||||
systemuser_display = serializers.ReadOnlyField(label=_("System user"))
|
||||
|
||||
def get_field_names(self, declared_fields, info):
|
||||
fields = super().get_field_names(declared_fields, info)
|
||||
|
@ -243,7 +243,7 @@ class RelationMixin(BulkSerializerMixin, serializers.Serializer):
|
|||
|
||||
|
||||
class SystemUserAssetRelationSerializer(RelationMixin, serializers.ModelSerializer):
|
||||
asset_display = serializers.ReadOnlyField()
|
||||
asset_display = serializers.ReadOnlyField(label=_('Asset'))
|
||||
|
||||
class Meta:
|
||||
model = SystemUser.assets.through
|
||||
|
|
Loading…
Reference in New Issue