perf: 工单动作添加操作日志 (#11857)

Co-authored-by: feng <1304903146@qq.com>
pull/11858/head
fit2bot 1 year ago committed by GitHub
parent 86e8f3a80b
commit 8b6526211c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -29,11 +29,13 @@ class ActionChoices(TextChoices):
connect = "connect", _("Connect") connect = "connect", _("Connect")
login = "login", _("Login") login = "login", _("Login")
change_auth = "change_password", _("Change password") change_auth = "change_password", _("Change password")
# acls action
reject = 'reject', _('Reject')
accept = 'accept', _('Accept') accept = 'accept', _('Accept')
review = 'review', _('Review') review = 'review', _('Review')
notice = 'notice', _('Notifications') notice = 'notice', _('Notifications')
reject = 'reject', _('Reject')
approve = 'approve', _('Approve')
close = 'close', _('Close')
class LoginTypeChoices(TextChoices): class LoginTypeChoices(TextChoices):

@ -6,9 +6,10 @@ from rest_framework.decorators import action
from rest_framework.exceptions import MethodNotAllowed from rest_framework.exceptions import MethodNotAllowed
from rest_framework.response import Response from rest_framework.response import Response
from audits.handler import create_or_update_operate_log
from common.api import CommonApiMixin from common.api import CommonApiMixin
from common.const.http import POST, PUT, PATCH from common.const.http import POST, PUT, PATCH
from orgs.utils import tmp_to_root_org from orgs.utils import tmp_to_root_org, tmp_to_org
from rbac.permissions import RBACPermission from rbac.permissions import RBACPermission
from tickets import filters from tickets import filters
from tickets import serializers from tickets import serializers
@ -17,6 +18,7 @@ from tickets.models import (
ApplyLoginAssetTicket, ApplyCommandTicket ApplyLoginAssetTicket, ApplyCommandTicket
) )
from tickets.permissions.ticket import IsAssignee, IsApplicant from tickets.permissions.ticket import IsAssignee, IsApplicant
from ..const import TicketAction
__all__ = [ __all__ = [
'TicketViewSet', 'ApplyAssetTicketViewSet', 'TicketViewSet', 'ApplyAssetTicketViewSet',
@ -77,6 +79,21 @@ class TicketViewSet(CommonApiMixin, viewsets.ModelViewSet):
with tmp_to_root_org(): with tmp_to_root_org():
return super().create(request, *args, **kwargs) return super().create(request, *args, **kwargs)
@staticmethod
def _record_operate_log(ticket, action):
with tmp_to_org(ticket.org_id):
after = {
'ID': str(ticket.id),
str(_('Name')): ticket.title,
str(_('Applicant')): str(ticket.applicant),
}
object_name = ticket._meta.object_name
resource_type = ticket._meta.verbose_name
create_or_update_operate_log(
action, resource_type, resource=ticket,
after=after, object_name=object_name
)
@action(detail=True, methods=[PUT, PATCH], permission_classes=[IsAssignee, ]) @action(detail=True, methods=[PUT, PATCH], permission_classes=[IsAssignee, ])
def approve(self, request, *args, **kwargs): def approve(self, request, *args, **kwargs):
self.ticket_not_allowed() self.ticket_not_allowed()
@ -88,18 +105,21 @@ class TicketViewSet(CommonApiMixin, viewsets.ModelViewSet):
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
instance = serializer.save() instance = serializer.save()
instance.approve(processor=request.user) instance.approve(processor=request.user)
self._record_operate_log(instance, TicketAction.approve)
return Response('ok') return Response('ok')
@action(detail=True, methods=[PUT], permission_classes=[IsAssignee, ]) @action(detail=True, methods=[PUT], permission_classes=[IsAssignee, ])
def reject(self, request, *args, **kwargs): def reject(self, request, *args, **kwargs):
instance = self.get_object() instance = self.get_object()
instance.reject(processor=request.user) instance.reject(processor=request.user)
self._record_operate_log(instance, TicketAction.reject)
return Response('ok') return Response('ok')
@action(detail=True, methods=[PUT], permission_classes=[IsAssignee | IsApplicant, ]) @action(detail=True, methods=[PUT], permission_classes=[IsAssignee | IsApplicant, ])
def close(self, request, *args, **kwargs): def close(self, request, *args, **kwargs):
instance = self.get_object() instance = self.get_object()
instance.close() instance.close()
self._record_operate_log(instance, TicketAction.close)
return Response('ok') return Response('ok')
@action(detail=False, methods=[PUT], permission_classes=[RBACPermission, ]) @action(detail=False, methods=[PUT], permission_classes=[RBACPermission, ])

Loading…
Cancel
Save