mirror of https://github.com/jumpserver/jumpserver
feat: add app asset suggestion
parent
44044a7d99
commit
e8e211f47c
|
@ -6,11 +6,10 @@ from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from common.tree import TreeNodeSerializer
|
from common.tree import TreeNodeSerializer
|
||||||
from ..hands import IsOrgAdminOrAppUser
|
from ..hands import IsOrgAdminOrAppUser, IsValidUser
|
||||||
from .. import serializers
|
from .. import serializers
|
||||||
from ..models import Application
|
from ..models import Application
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['ApplicationViewSet']
|
__all__ = ['ApplicationViewSet']
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,7 +24,8 @@ class ApplicationViewSet(OrgBulkModelViewSet):
|
||||||
permission_classes = (IsOrgAdminOrAppUser,)
|
permission_classes = (IsOrgAdminOrAppUser,)
|
||||||
serializer_classes = {
|
serializer_classes = {
|
||||||
'default': serializers.ApplicationSerializer,
|
'default': serializers.ApplicationSerializer,
|
||||||
'get_tree': TreeNodeSerializer
|
'get_tree': TreeNodeSerializer,
|
||||||
|
'suggestion': serializers.MiniApplicationSerializer
|
||||||
}
|
}
|
||||||
|
|
||||||
@action(methods=['GET'], detail=False, url_path='tree')
|
@action(methods=['GET'], detail=False, url_path='tree')
|
||||||
|
@ -35,3 +35,9 @@ class ApplicationViewSet(OrgBulkModelViewSet):
|
||||||
tree_nodes = Application.create_tree_nodes(queryset, show_count=show_count)
|
tree_nodes = Application.create_tree_nodes(queryset, show_count=show_count)
|
||||||
serializer = self.get_serializer(tree_nodes, many=True)
|
serializer = self.get_serializer(tree_nodes, many=True)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
@action(methods=['get'], detail=False, permission_classes=(IsValidUser,))
|
||||||
|
def suggestion(self, request):
|
||||||
|
queryset = self.filter_queryset(self.get_queryset())[:3]
|
||||||
|
serializer = self.get_serializer(queryset, many=True)
|
||||||
|
return Response(serializer.data)
|
||||||
|
|
|
@ -12,7 +12,7 @@ from .. import models
|
||||||
from .. import const
|
from .. import const
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'ApplicationSerializer', 'ApplicationSerializerMixin',
|
'ApplicationSerializer', 'ApplicationSerializerMixin', 'MiniApplicationSerializer',
|
||||||
'ApplicationAccountSerializer', 'ApplicationAccountSecretSerializer'
|
'ApplicationAccountSerializer', 'ApplicationAccountSecretSerializer'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -108,3 +108,9 @@ class ApplicationAccountSerializer(serializers.Serializer):
|
||||||
|
|
||||||
class ApplicationAccountSecretSerializer(ApplicationAccountSerializer):
|
class ApplicationAccountSecretSerializer(ApplicationAccountSerializer):
|
||||||
password = serializers.CharField(write_only=False, label=_("Password"))
|
password = serializers.CharField(write_only=False, label=_("Password"))
|
||||||
|
|
||||||
|
|
||||||
|
class MiniApplicationSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = models.Application
|
||||||
|
fields = ApplicationSerializer.Meta.fields_mini
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
from assets.api import FilterAssetByNodeMixin
|
from assets.api import FilterAssetByNodeMixin
|
||||||
|
from rest_framework.decorators import action
|
||||||
from rest_framework.viewsets import ModelViewSet
|
from rest_framework.viewsets import ModelViewSet
|
||||||
from rest_framework.generics import RetrieveAPIView
|
from rest_framework.generics import RetrieveAPIView
|
||||||
|
from rest_framework.response import Response
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
from common.utils import get_logger, get_object_or_none
|
from common.utils import get_logger, get_object_or_none
|
||||||
from common.permissions import IsOrgAdmin, IsOrgAdminOrAppUser, IsSuperUser
|
from common.permissions import IsOrgAdmin, IsOrgAdminOrAppUser, IsSuperUser, IsValidUser
|
||||||
from orgs.mixins.api import OrgBulkModelViewSet
|
from orgs.mixins.api import OrgBulkModelViewSet
|
||||||
from orgs.mixins import generics
|
from orgs.mixins import generics
|
||||||
from ..models import Asset, Node, Platform, SystemUser
|
from ..models import Asset, Node, Platform
|
||||||
from .. import serializers
|
from .. import serializers
|
||||||
from ..tasks import (
|
from ..tasks import (
|
||||||
update_assets_hardware_info_manual, test_assets_connectivity_manual,
|
update_assets_hardware_info_manual, test_assets_connectivity_manual,
|
||||||
|
@ -17,7 +19,6 @@ from ..tasks import (
|
||||||
)
|
)
|
||||||
from ..filters import FilterAssetByNodeFilterBackend, LabelFilterBackend, IpInFilterBackend
|
from ..filters import FilterAssetByNodeFilterBackend, LabelFilterBackend, IpInFilterBackend
|
||||||
|
|
||||||
|
|
||||||
logger = get_logger(__file__)
|
logger = get_logger(__file__)
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'AssetViewSet', 'AssetPlatformRetrieveApi',
|
'AssetViewSet', 'AssetPlatformRetrieveApi',
|
||||||
|
@ -43,6 +44,7 @@ class AssetViewSet(FilterAssetByNodeMixin, OrgBulkModelViewSet):
|
||||||
ordering_fields = ("hostname", "ip", "port", "cpu_cores")
|
ordering_fields = ("hostname", "ip", "port", "cpu_cores")
|
||||||
serializer_classes = {
|
serializer_classes = {
|
||||||
'default': serializers.AssetSerializer,
|
'default': serializers.AssetSerializer,
|
||||||
|
'suggestion': serializers.MiniAssetSerializer
|
||||||
}
|
}
|
||||||
permission_classes = (IsOrgAdminOrAppUser,)
|
permission_classes = (IsOrgAdminOrAppUser,)
|
||||||
extra_filter_backends = [FilterAssetByNodeFilterBackend, LabelFilterBackend, IpInFilterBackend]
|
extra_filter_backends = [FilterAssetByNodeFilterBackend, LabelFilterBackend, IpInFilterBackend]
|
||||||
|
@ -62,6 +64,12 @@ class AssetViewSet(FilterAssetByNodeMixin, OrgBulkModelViewSet):
|
||||||
assets = serializer.save()
|
assets = serializer.save()
|
||||||
self.set_assets_node(assets)
|
self.set_assets_node(assets)
|
||||||
|
|
||||||
|
@action(methods=['get'], detail=False, permission_classes=(IsValidUser,))
|
||||||
|
def suggestion(self, request):
|
||||||
|
queryset = self.filter_queryset(self.get_queryset())[:3]
|
||||||
|
serializer = self.get_serializer(queryset, many=True)
|
||||||
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|
||||||
class AssetPlatformRetrieveApi(RetrieveAPIView):
|
class AssetPlatformRetrieveApi(RetrieveAPIView):
|
||||||
queryset = Platform.objects.all()
|
queryset = Platform.objects.all()
|
||||||
|
|
|
@ -8,7 +8,7 @@ from orgs.mixins.serializers import BulkOrgResourceModelSerializer
|
||||||
from ..models import Asset, Node, Platform, SystemUser
|
from ..models import Asset, Node, Platform, SystemUser
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'AssetSerializer', 'AssetSimpleSerializer',
|
'AssetSerializer', 'AssetSimpleSerializer', 'MiniAssetSerializer',
|
||||||
'ProtocolsField', 'PlatformSerializer',
|
'ProtocolsField', 'PlatformSerializer',
|
||||||
'AssetTaskSerializer', 'AssetsTaskSerializer', 'ProtocolsField'
|
'AssetTaskSerializer', 'AssetsTaskSerializer', 'ProtocolsField'
|
||||||
]
|
]
|
||||||
|
@ -69,6 +69,7 @@ class AssetSerializer(BulkOrgResourceModelSerializer):
|
||||||
"""
|
"""
|
||||||
资产的数据结构
|
资产的数据结构
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Asset
|
model = Asset
|
||||||
fields_mini = ['id', 'hostname', 'ip', 'platform', 'protocols']
|
fields_mini = ['id', 'hostname', 'ip', 'platform', 'protocols']
|
||||||
|
@ -157,6 +158,12 @@ class AssetSerializer(BulkOrgResourceModelSerializer):
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
class MiniAssetSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Asset
|
||||||
|
fields = AssetSerializer.Meta.fields_mini
|
||||||
|
|
||||||
|
|
||||||
class PlatformSerializer(serializers.ModelSerializer):
|
class PlatformSerializer(serializers.ModelSerializer):
|
||||||
meta = serializers.DictField(required=False, allow_null=True, label=_('Meta'))
|
meta = serializers.DictField(required=False, allow_null=True, label=_('Meta'))
|
||||||
|
|
||||||
|
@ -177,7 +184,6 @@ class PlatformSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
class AssetSimpleSerializer(serializers.ModelSerializer):
|
class AssetSimpleSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Asset
|
model = Asset
|
||||||
fields = ['id', 'hostname', 'ip', 'port', 'connectivity', 'date_verified']
|
fields = ['id', 'hostname', 'ip', 'port', 'connectivity', 'date_verified']
|
||||||
|
|
|
@ -130,14 +130,7 @@ class UserViewSet(CommonApiMixin, UserQuerysetMixin, BulkModelViewSet):
|
||||||
@action(methods=['get'], detail=False, permission_classes=(IsOrgAdmin,))
|
@action(methods=['get'], detail=False, permission_classes=(IsOrgAdmin,))
|
||||||
def suggestion(self, request):
|
def suggestion(self, request):
|
||||||
queryset = User.objects.exclude(role=User.ROLE.APP)
|
queryset = User.objects.exclude(role=User.ROLE.APP)
|
||||||
queryset = self.filter_queryset(queryset)
|
queryset = self.filter_queryset(queryset)[:3]
|
||||||
queryset = queryset[:3]
|
|
||||||
|
|
||||||
page = self.paginate_queryset(queryset)
|
|
||||||
if page is not None:
|
|
||||||
serializer = self.get_serializer(page, many=True)
|
|
||||||
return self.get_paginated_response(serializer.data)
|
|
||||||
|
|
||||||
serializer = self.get_serializer(queryset, many=True)
|
serializer = self.get_serializer(queryset, many=True)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|
|
@ -181,7 +181,7 @@ class UserRetrieveSerializer(UserSerializer):
|
||||||
class MiniUserSerializer(serializers.ModelSerializer):
|
class MiniUserSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = ['id', 'name', 'username']
|
fields = UserSerializer.Meta.fields_mini
|
||||||
|
|
||||||
|
|
||||||
class InviteSerializer(serializers.Serializer):
|
class InviteSerializer(serializers.Serializer):
|
||||||
|
|
Loading…
Reference in New Issue