mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-04-28 11:25:42 +00:00
* perf: 重构 ticket * perf: 优化 tickets * perf: 暂存 * perf: 建立 ticket model * perf: 暂存一下 * perf: 修改 tickets * perf: 修改 import * perf: 修改model * perf: 暂存一波 * perf: 修改... * del process_map field * 工单重构 * 资产 应用对接前端 * perf: 修改 ticket * fix: bug * 修改迁移文件 * 添加其他api * 去掉process_map * perf: 优化去掉 signal * perf: 修改这里 * 修改一点 * perf: 修改工单 * perf: 修改状态 * perf: 修改工单流转 * step 状态切换 * perf: 修改 ticket open * perf: 修改流程 * perf: stash it * 改又改 * stash it * perf: stash * stash * migrate * perf migrate * 调整一下 * 修复bug * 修改一点 * 修改一点 * 优化一波 * perf: ticket migrations Co-authored-by: ibuler <ibuler@qq.com> Co-authored-by: feng626 <1304903146@qq.com>
128 lines
4.3 KiB
Python
128 lines
4.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
from rest_framework import viewsets
|
|
from rest_framework.decorators import action
|
|
from rest_framework.response import Response
|
|
from rest_framework.exceptions import MethodNotAllowed
|
|
|
|
from common.const.http import POST, PUT
|
|
from common.mixins.api import CommonApiMixin
|
|
from orgs.utils import tmp_to_root_org
|
|
|
|
from rbac.permissions import RBACPermission
|
|
|
|
from tickets import serializers
|
|
from tickets import filters
|
|
from tickets.permissions.ticket import IsAssignee, IsApplicant
|
|
from tickets.models import (
|
|
Ticket, ApplyAssetTicket, ApplyApplicationTicket,
|
|
ApplyLoginTicket, ApplyLoginAssetTicket, ApplyCommandTicket
|
|
)
|
|
|
|
__all__ = [
|
|
'TicketViewSet', 'ApplyAssetTicketViewSet', 'ApplyApplicationTicketViewSet',
|
|
'ApplyLoginTicketViewSet', 'ApplyLoginAssetTicketViewSet', 'ApplyCommandTicketViewSet'
|
|
]
|
|
|
|
|
|
class TicketViewSet(CommonApiMixin, viewsets.ModelViewSet):
|
|
serializer_class = serializers.TicketDisplaySerializer
|
|
serializer_classes = {
|
|
'list': serializers.TicketListSerializer,
|
|
'open': serializers.TicketApplySerializer
|
|
}
|
|
model = Ticket
|
|
filterset_class = filters.TicketFilter
|
|
search_fields = [
|
|
'title', 'type', 'status', 'applicant_display'
|
|
]
|
|
ordering_fields = (
|
|
'title', 'applicant_display', 'status', 'state',
|
|
'action_display', 'date_created', 'serial_num',
|
|
)
|
|
ordering = ('-date_created',)
|
|
rbac_perms = {
|
|
'open': 'tickets.view_ticket',
|
|
}
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
raise MethodNotAllowed(self.action)
|
|
|
|
def update(self, request, *args, **kwargs):
|
|
raise MethodNotAllowed(self.action)
|
|
|
|
def destroy(self, request, *args, **kwargs):
|
|
raise MethodNotAllowed(self.action)
|
|
|
|
def get_queryset(self):
|
|
with tmp_to_root_org():
|
|
queryset = self.model.get_user_related_tickets(self.request.user)
|
|
return queryset
|
|
|
|
def perform_create(self, serializer):
|
|
instance = serializer.save()
|
|
instance.applicant = self.request.user
|
|
instance.save(update_fields=['applicant'])
|
|
instance.open()
|
|
|
|
@action(detail=False, methods=[POST], permission_classes=[RBACPermission, ])
|
|
def open(self, request, *args, **kwargs):
|
|
return super().create(request, *args, **kwargs)
|
|
|
|
@action(detail=True, methods=[PUT], permission_classes=[IsAssignee, ])
|
|
def approve(self, request, *args, **kwargs):
|
|
instance = self.get_object()
|
|
serializer = self.get_serializer(instance)
|
|
instance.approve(processor=request.user)
|
|
return Response(serializer.data)
|
|
|
|
@action(detail=True, methods=[PUT], permission_classes=[IsAssignee, ])
|
|
def reject(self, request, *args, **kwargs):
|
|
instance = self.get_object()
|
|
serializer = self.get_serializer(instance)
|
|
instance.reject(processor=request.user)
|
|
return Response(serializer.data)
|
|
|
|
@action(detail=True, methods=[PUT], permission_classes=[IsApplicant, ])
|
|
def close(self, request, *args, **kwargs):
|
|
instance = self.get_object()
|
|
serializer = self.get_serializer(instance)
|
|
instance.close()
|
|
return Response(serializer.data)
|
|
|
|
|
|
class ApplyAssetTicketViewSet(TicketViewSet):
|
|
serializer_class = serializers.ApplyAssetDisplaySerializer
|
|
serializer_classes = {
|
|
'open': serializers.ApplyAssetSerializer
|
|
}
|
|
model = ApplyAssetTicket
|
|
filterset_class = filters.ApplyAssetTicketFilter
|
|
|
|
|
|
class ApplyApplicationTicketViewSet(TicketViewSet):
|
|
serializer_class = serializers.ApplyApplicationDisplaySerializer
|
|
serializer_classes = {
|
|
'open': serializers.ApplyApplicationSerializer
|
|
}
|
|
model = ApplyApplicationTicket
|
|
filterset_class = filters.ApplyApplicationTicketFilter
|
|
|
|
|
|
class ApplyLoginTicketViewSet(TicketViewSet):
|
|
serializer_class = serializers.LoginConfirmSerializer
|
|
model = ApplyLoginTicket
|
|
filterset_class = filters.ApplyLoginTicketFilter
|
|
|
|
|
|
class ApplyLoginAssetTicketViewSet(TicketViewSet):
|
|
serializer_class = serializers.LoginAssetConfirmSerializer
|
|
model = ApplyLoginAssetTicket
|
|
filterset_class = filters.ApplyLoginAssetTicketFilter
|
|
|
|
|
|
class ApplyCommandTicketViewSet(TicketViewSet):
|
|
serializer_class = serializers.ApplyCommandConfirmSerializer
|
|
model = ApplyCommandTicket
|
|
filterset_class = filters.ApplyCommandTicketFilter
|