mirror of https://github.com/jumpserver/jumpserver
fix: 修复工单bug
parent
683461a49b
commit
ea4dccbab8
|
@ -6,14 +6,15 @@ 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, IsValidUser
|
from common.mixins.views import SuggestionMixin
|
||||||
|
from ..hands import IsOrgAdminOrAppUser
|
||||||
from .. import serializers
|
from .. import serializers
|
||||||
from ..models import Application
|
from ..models import Application
|
||||||
|
|
||||||
__all__ = ['ApplicationViewSet']
|
__all__ = ['ApplicationViewSet']
|
||||||
|
|
||||||
|
|
||||||
class ApplicationViewSet(OrgBulkModelViewSet):
|
class ApplicationViewSet(SuggestionMixin, OrgBulkModelViewSet):
|
||||||
model = Application
|
model = Application
|
||||||
filterset_fields = {
|
filterset_fields = {
|
||||||
'name': ['exact'],
|
'name': ['exact'],
|
||||||
|
@ -24,7 +25,8 @@ class ApplicationViewSet(OrgBulkModelViewSet):
|
||||||
permission_classes = (IsOrgAdminOrAppUser,)
|
permission_classes = (IsOrgAdminOrAppUser,)
|
||||||
serializer_classes = {
|
serializer_classes = {
|
||||||
'default': serializers.AppSerializer,
|
'default': serializers.AppSerializer,
|
||||||
'get_tree': TreeNodeSerializer
|
'get_tree': TreeNodeSerializer,
|
||||||
|
'suggestion': serializers.MiniAppSerializer
|
||||||
}
|
}
|
||||||
|
|
||||||
@action(methods=['GET'], detail=False, url_path='tree')
|
@action(methods=['GET'], detail=False, url_path='tree')
|
||||||
|
@ -34,9 +36,3 @@ 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)
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ from .. import models
|
||||||
from .. import const
|
from .. import const
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'AppSerializer', 'AppSerializerMixin',
|
'AppSerializer', 'MiniAppSerializer', 'AppSerializerMixin',
|
||||||
'AppAccountSerializer', 'AppAccountSecretSerializer'
|
'AppAccountSerializer', 'AppAccountSecretSerializer'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -78,6 +78,12 @@ class AppSerializer(AppSerializerMixin, BulkOrgResourceModelSerializer):
|
||||||
return _attrs
|
return _attrs
|
||||||
|
|
||||||
|
|
||||||
|
class MiniAppSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = models.Application
|
||||||
|
fields = AppSerializer.Meta.fields_mini
|
||||||
|
|
||||||
|
|
||||||
class AppAccountSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer):
|
class AppAccountSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer):
|
||||||
category = serializers.ChoiceField(label=_('Category'), choices=const.AppCategory.choices, read_only=True)
|
category = serializers.ChoiceField(label=_('Category'), choices=const.AppCategory.choices, read_only=True)
|
||||||
category_display = serializers.SerializerMethodField(label=_('Category display'))
|
category_display = serializers.SerializerMethodField(label=_('Category display'))
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
# -*- 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, IsValidUser
|
from common.permissions import IsOrgAdmin, IsOrgAdminOrAppUser, IsSuperUser
|
||||||
|
from common.mixins.views import SuggestionMixin
|
||||||
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
|
from ..models import Asset, Node, Platform
|
||||||
|
@ -27,7 +26,7 @@ __all__ = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class AssetViewSet(FilterAssetByNodeMixin, OrgBulkModelViewSet):
|
class AssetViewSet(SuggestionMixin, FilterAssetByNodeMixin, OrgBulkModelViewSet):
|
||||||
"""
|
"""
|
||||||
API endpoint that allows Asset to be viewed or edited.
|
API endpoint that allows Asset to be viewed or edited.
|
||||||
"""
|
"""
|
||||||
|
@ -64,12 +63,6 @@ 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()
|
||||||
|
|
|
@ -6,6 +6,7 @@ from common.utils import get_logger
|
||||||
from common.permissions import IsOrgAdmin, IsOrgAdminOrAppUser, IsValidUser
|
from common.permissions import IsOrgAdmin, IsOrgAdminOrAppUser, IsValidUser
|
||||||
from orgs.mixins.api import OrgBulkModelViewSet
|
from orgs.mixins.api import OrgBulkModelViewSet
|
||||||
from orgs.mixins import generics
|
from orgs.mixins import generics
|
||||||
|
from common.mixins.views import SuggestionMixin
|
||||||
from orgs.utils import tmp_to_root_org
|
from orgs.utils import tmp_to_root_org
|
||||||
from ..models import SystemUser, Asset
|
from ..models import SystemUser, Asset
|
||||||
from .. import serializers
|
from .. import serializers
|
||||||
|
@ -24,7 +25,7 @@ __all__ = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class SystemUserViewSet(OrgBulkModelViewSet):
|
class SystemUserViewSet(SuggestionMixin, OrgBulkModelViewSet):
|
||||||
"""
|
"""
|
||||||
System user api set, for add,delete,update,list,retrieve resource
|
System user api set, for add,delete,update,list,retrieve resource
|
||||||
"""
|
"""
|
||||||
|
@ -39,6 +40,7 @@ class SystemUserViewSet(OrgBulkModelViewSet):
|
||||||
serializer_class = serializers.SystemUserSerializer
|
serializer_class = serializers.SystemUserSerializer
|
||||||
serializer_classes = {
|
serializer_classes = {
|
||||||
'default': serializers.SystemUserSerializer,
|
'default': serializers.SystemUserSerializer,
|
||||||
|
'suggestion': serializers.MiniSystemUserSerializer
|
||||||
}
|
}
|
||||||
permission_classes = (IsOrgAdminOrAppUser,)
|
permission_classes = (IsOrgAdminOrAppUser,)
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ from .utils import validate_password_contains_left_double_curly_bracket
|
||||||
from .base import AuthSerializerMixin
|
from .base import AuthSerializerMixin
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'SystemUserSerializer',
|
'SystemUserSerializer', 'MiniSystemUserSerializer',
|
||||||
'SystemUserSimpleSerializer', 'SystemUserAssetRelationSerializer',
|
'SystemUserSimpleSerializer', 'SystemUserAssetRelationSerializer',
|
||||||
'SystemUserNodeRelationSerializer', 'SystemUserTaskSerializer',
|
'SystemUserNodeRelationSerializer', 'SystemUserTaskSerializer',
|
||||||
'SystemUserUserRelationSerializer', 'SystemUserWithAuthInfoSerializer',
|
'SystemUserUserRelationSerializer', 'SystemUserWithAuthInfoSerializer',
|
||||||
|
@ -185,6 +185,12 @@ class SystemUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer):
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
|
class MiniSystemUserSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = SystemUser
|
||||||
|
fields = SystemUserSerializer.Meta.fields_mini
|
||||||
|
|
||||||
|
|
||||||
class SystemUserWithAuthInfoSerializer(SystemUserSerializer):
|
class SystemUserWithAuthInfoSerializer(SystemUserSerializer):
|
||||||
class Meta(SystemUserSerializer.Meta):
|
class Meta(SystemUserSerializer.Meta):
|
||||||
fields_mini = ['id', 'name', 'username']
|
fields_mini = ['id', 'name', 'username']
|
||||||
|
@ -208,6 +214,7 @@ class SystemUserSimpleSerializer(serializers.ModelSerializer):
|
||||||
"""
|
"""
|
||||||
系统用户最基本信息的数据结构
|
系统用户最基本信息的数据结构
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SystemUser
|
model = SystemUser
|
||||||
fields = ('id', 'name', 'username')
|
fields = ('id', 'name', 'username')
|
||||||
|
|
|
@ -3,12 +3,14 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
from django.contrib.auth.mixins import UserPassesTestMixin
|
from django.contrib.auth.mixins import UserPassesTestMixin
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
from rest_framework.decorators import action
|
||||||
|
from rest_framework import permissions
|
||||||
|
from rest_framework.response import Response
|
||||||
|
|
||||||
|
from common.permissions import IsValidUser
|
||||||
|
|
||||||
__all__ = ["DatetimeSearchMixin", "PermissionsMixin"]
|
__all__ = ["DatetimeSearchMixin", "PermissionsMixin"]
|
||||||
|
|
||||||
from rest_framework import permissions
|
|
||||||
|
|
||||||
|
|
||||||
class DatetimeSearchMixin:
|
class DatetimeSearchMixin:
|
||||||
date_format = '%Y-%m-%d'
|
date_format = '%Y-%m-%d'
|
||||||
|
@ -52,3 +54,18 @@ class PermissionsMixin(UserPassesTestMixin):
|
||||||
if not permission_class().has_permission(self.request, self):
|
if not permission_class().has_permission(self.request, self):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
class SuggestionMixin:
|
||||||
|
|
||||||
|
@action(methods=['get'], detail=False, permission_classes=(IsValidUser,))
|
||||||
|
def suggestions(self, request, *args, **kwargs):
|
||||||
|
queryset = self.filter_queryset(self.get_queryset())
|
||||||
|
queryset = queryset[:10]
|
||||||
|
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)
|
||||||
|
return Response(serializer.data)
|
||||||
|
|
|
@ -149,7 +149,7 @@ class TicketFlowApproveSerializer(serializers.ModelSerializer):
|
||||||
fields = fields_small + fields_m2m
|
fields = fields_small + fields_m2m
|
||||||
read_only_fields = ['level', 'assignees_display']
|
read_only_fields = ['level', 'assignees_display']
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'assignees': {'write_only': True, 'allow_empty': True}
|
'assignees': {'write_only': True, 'allow_empty': True, 'required': False}
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_assignees_read_only(self, obj):
|
def get_assignees_read_only(self, obj):
|
||||||
|
|
Loading…
Reference in New Issue