mirror of https://github.com/jumpserver/jumpserver
账号过滤
parent
d5c13df6be
commit
60eb385c1e
|
@ -1,5 +1,3 @@
|
|||
from django.db.models import Q
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django_filters import rest_framework as filters
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
|
@ -7,52 +5,40 @@ from rest_framework.generics import CreateAPIView
|
|||
|
||||
from orgs.mixins.api import OrgBulkModelViewSet
|
||||
from rbac.permissions import RBACPermission
|
||||
from common.drf.filters import BaseFilterSet
|
||||
from common.drf.filters import BaseFilterSet, UUIDInFilter
|
||||
from common.mixins import RecordViewLogMixin
|
||||
from common.permissions import UserConfirmation
|
||||
from authentication.const import ConfirmType
|
||||
from ..tasks.account_connectivity import test_accounts_connectivity_manual
|
||||
from ..models import Node, Account
|
||||
from ..models import Account, Node
|
||||
from .. import serializers
|
||||
|
||||
__all__ = ['AccountFilterSet', 'AccountViewSet', 'AccountSecretsViewSet', 'AccountTaskCreateAPI']
|
||||
|
||||
|
||||
class AccountFilterSet(BaseFilterSet):
|
||||
username = filters.CharFilter(method='do_nothing')
|
||||
ip = filters.CharFilter(field_name='ip', lookup_expr='exact')
|
||||
hostname = filters.CharFilter(field_name='name', lookup_expr='exact')
|
||||
node = filters.CharFilter(method='do_nothing')
|
||||
username = filters.CharFilter(field_name="username", lookup_expr='exact')
|
||||
assets = UUIDInFilter(field_name='asset_id', lookup_expr='in')
|
||||
nodes = UUIDInFilter(method='filter_nodes')
|
||||
|
||||
@property
|
||||
def qs(self):
|
||||
qs = super().qs
|
||||
qs = self.filter_username(qs)
|
||||
qs = self.filter_node(qs)
|
||||
qs = qs.distinct()
|
||||
return qs
|
||||
def filter_nodes(self, queryset, name, value):
|
||||
nodes = Node.objects.filter(id__in=value)
|
||||
if not nodes:
|
||||
return queryset
|
||||
|
||||
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
|
||||
|
||||
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_all_children(with_self=True).values_list('id', flat=True)
|
||||
node_ids = list(node_ids)
|
||||
qs = qs.filter(asset__nodes__in=node_ids)
|
||||
return qs
|
||||
node_qs = Node.objects.none()
|
||||
for node in nodes:
|
||||
node_qs |= node.get_all_children(with_self=True)
|
||||
node_ids = list(node_qs.values_list('id', flat=True))
|
||||
queryset = queryset.filter(asset__nodes__in=node_ids)
|
||||
return queryset
|
||||
|
||||
class Meta:
|
||||
model = Account
|
||||
fields = [
|
||||
'asset', 'id',
|
||||
'asset', 'id'
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
<<<<<<< HEAD
|
||||
=======
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
from rest_framework.viewsets import ModelViewSet
|
||||
|
@ -309,5 +307,3 @@ class AssetPermUserGroupPermissionsListApi(BaseAssetPermUserOrUserGroupPermissio
|
|||
user_group_id = self.kwargs.get('perm_user_group_id')
|
||||
user_group = get_object_or_404(UserGroup, pk=user_group_id)
|
||||
return user_group
|
||||
|
||||
>>>>>>> origin
|
||||
|
|
|
@ -5,7 +5,7 @@ from common.drf.api import JMSModelViewSet
|
|||
from common.drf.serializers import GroupedChoiceSerailizer
|
||||
from assets.models import Platform
|
||||
from assets.serializers import PlatformSerializer
|
||||
from assets.const import AllTypes, Category
|
||||
from assets.const import AllTypes
|
||||
from assets.resources.platform import get_platform_methods
|
||||
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ class DatetimeRangeFilter(filters.BaseFilterBackend):
|
|||
lookup = "__gte"
|
||||
else:
|
||||
lookup = "__lte"
|
||||
kwargs[attr+lookup] = value
|
||||
kwargs[attr + lookup] = value
|
||||
except ValidationError as e:
|
||||
print(e)
|
||||
continue
|
||||
|
@ -171,4 +171,13 @@ def current_user_filter(user_field='user'):
|
|||
class CurrentUserFilter(filters.BaseFilterBackend):
|
||||
def filter_queryset(self, request, queryset, view):
|
||||
return queryset.filter(**{user_field: request.user})
|
||||
|
||||
return CurrentUserFilter
|
||||
|
||||
|
||||
class UUIDInFilter(drf_filters.BaseInFilter, drf_filters.UUIDFilter):
|
||||
pass
|
||||
|
||||
|
||||
class NumberInFilter(drf_filters.BaseInFilter, drf_filters.NumberFilter):
|
||||
pass
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:261eee68117787809a9bc6b2034846ee7b222677224f97055f7d7398d427b1d7
|
||||
size 255
|
||||
oid sha256:d7d4ace7d7ec976b0321bde41789f994f02e3ab6f034828cbfb7e675a313611f
|
||||
size 131531
|
||||
|
|
|
@ -1,6 +1,2 @@
|
|||
from django_filters.rest_framework import filters
|
||||
|
||||
|
||||
class UUIDInFilter(filters.BaseInFilter, filters.UUIDFilter):
|
||||
pass
|
||||
|
||||
|
|
Loading…
Reference in New Issue