perf: 资产账号支持,几点过滤

pull/6535/head^2
ibuler 2021-07-22 16:17:23 +08:00 committed by Jiangjie.Bai
parent 473a66719b
commit 962f1c0310
1 changed files with 14 additions and 1 deletions

View File

@ -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 = [