jumpserver/apps/tickets/api/comment.py

43 lines
1.3 KiB
Python

# -*- coding: utf-8 -*-
#
from rest_framework import viewsets, mixins
from common.exceptions import JMSException
from common.utils import lazyproperty
from rbac.permissions import RBACPermission
from tickets import serializers
from tickets.models import Ticket, Comment
from tickets.permissions.comment import IsAssignee, IsApplicant, IsSwagger
__all__ = ['CommentViewSet']
class CommentViewSet(mixins.CreateModelMixin, viewsets.ReadOnlyModelViewSet):
serializer_class = serializers.CommentSerializer
permission_classes = (RBACPermission, IsSwagger | IsAssignee | IsApplicant)
rbac_perms = {
'*': 'tickets.view_ticket'
}
@lazyproperty
def ticket(self):
if getattr(self, 'swagger_fake_view', False):
return None
ticket_id = self.request.query_params.get('ticket_id')
ticket = Ticket.all().filter(pk=ticket_id).first()
if not ticket:
raise JMSException('Not found Ticket object about `id={}`'.format(ticket_id))
return ticket
def get_serializer_context(self):
context = super().get_serializer_context()
context['ticket'] = self.ticket
return context
def get_queryset(self):
if getattr(self, 'swagger_fake_view', False):
return Comment.objects.none()
queryset = self.ticket.comments.all()
return queryset