mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.3 KiB
41 lines
1.3 KiB
# -*- 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
|
|
|