mirror of https://github.com/jumpserver/jumpserver
perf: 资产账号支持,几点过滤
parent
473a66719b
commit
962f1c0310
|
@ -3,13 +3,14 @@ from django.conf import settings
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from django_filters import rest_framework as filters
|
from django_filters import rest_framework as filters
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
from rest_framework.generics import CreateAPIView
|
from rest_framework.generics import CreateAPIView
|
||||||
|
|
||||||
from orgs.mixins.api import OrgBulkModelViewSet
|
from orgs.mixins.api import OrgBulkModelViewSet
|
||||||
from common.permissions import IsOrgAdmin, IsOrgAdminOrAppUser, NeedMFAVerify
|
from common.permissions import IsOrgAdmin, IsOrgAdminOrAppUser, NeedMFAVerify
|
||||||
from common.drf.filters import BaseFilterSet
|
from common.drf.filters import BaseFilterSet
|
||||||
from ..tasks.account_connectivity import test_accounts_connectivity_manual
|
from ..tasks.account_connectivity import test_accounts_connectivity_manual
|
||||||
from ..models import AuthBook
|
from ..models import AuthBook, Node
|
||||||
from .. import serializers
|
from .. import serializers
|
||||||
|
|
||||||
__all__ = ['AccountViewSet', 'AccountSecretsViewSet', 'AccountTaskCreateAPI']
|
__all__ = ['AccountViewSet', 'AccountSecretsViewSet', 'AccountTaskCreateAPI']
|
||||||
|
@ -19,11 +20,13 @@ class AccountFilterSet(BaseFilterSet):
|
||||||
username = filters.CharFilter(method='do_nothing')
|
username = filters.CharFilter(method='do_nothing')
|
||||||
ip = filters.CharFilter(field_name='ip', lookup_expr='exact')
|
ip = filters.CharFilter(field_name='ip', lookup_expr='exact')
|
||||||
hostname = filters.CharFilter(field_name='hostname', lookup_expr='exact')
|
hostname = filters.CharFilter(field_name='hostname', lookup_expr='exact')
|
||||||
|
node = filters.CharFilter(method='do_nothing')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def qs(self):
|
def qs(self):
|
||||||
qs = super().qs
|
qs = super().qs
|
||||||
qs = self.filter_username(qs)
|
qs = self.filter_username(qs)
|
||||||
|
qs = self.filter_node(qs)
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
def filter_username(self, qs):
|
def filter_username(self, qs):
|
||||||
|
@ -33,6 +36,16 @@ class AccountFilterSet(BaseFilterSet):
|
||||||
qs = qs.filter(Q(username=username) | Q(systemuser__username=username)).distinct()
|
qs = qs.filter(Q(username=username) | Q(systemuser__username=username)).distinct()
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
|
def filter_node(self, qs):
|
||||||
|
node_id = self.get_query_param('node')
|
||||||
|
if not node_id:
|
||||||
|
return qs
|
||||||
|
node = get_object_or_404(Node, pk=node_id)
|
||||||
|
node_ids = node.get_children(with_self=True).values_list('id', flat=True)
|
||||||
|
node_ids = list(node_ids)
|
||||||
|
qs = qs.filter(asset__nodes__in=node_ids)
|
||||||
|
return qs
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = AuthBook
|
model = AuthBook
|
||||||
fields = [
|
fields = [
|
||||||
|
|
Loading…
Reference in New Issue