From d7daf7071a3d38ae003876837067cfa58ffe6faf Mon Sep 17 00:00:00 2001 From: xinwen Date: Mon, 2 Nov 2020 15:25:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(ticket):=20=E5=B7=A5=E5=8D=95=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E8=B5=84=E4=BA=A7=E7=9A=84=E6=97=B6=E5=80=99=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E4=BA=BA=E4=B8=8D=E8=83=BD=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/tickets/api/request_asset_perm.py | 36 ++++++++++++++------------ apps/tickets/urls/api_urls.py | 1 + 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/apps/tickets/api/request_asset_perm.py b/apps/tickets/api/request_asset_perm.py index c1bc03ea3..81ee66e58 100644 --- a/apps/tickets/api/request_asset_perm.py +++ b/apps/tickets/api/request_asset_perm.py @@ -2,16 +2,15 @@ import textwrap from django.db.models import Q from django.utils.translation import ugettext_lazy as _ +from rest_framework.mixins import ListModelMixin from rest_framework.decorators import action from rest_framework.response import Response -from rest_framework.request import Request from orgs.models import Organization, ROLE as ORG_ROLE from users.models.user import User -from common.const.http import POST, GET -from common.drf.api import JMSModelViewSet +from common.const.http import POST +from common.drf.api import JMSModelViewSet, JmsGenericViewSet from common.permissions import IsValidUser, IsObjectOwner -from common.utils.django import get_object_or_none from common.utils.timezone import dt_parser from common.drf.serializers import EmptySerializer from perms.models.asset_permission import AssetPermission, Asset @@ -47,18 +46,6 @@ class RequestAssetPermTicketViewSet(JMSModelViewSet): action_display = instance.ACTION.get(action) raise TicketActionAlready(detail=_('Ticket has %s') % action_display) - @action(detail=False, methods=[GET], permission_classes=[IsValidUser]) - def assignees(self, request: Request, *args, **kwargs): - user = request.user - org_id = request.query_params.get('org_id', Organization.DEFAULT_ID) - - q = Q(role=User.ROLE.ADMIN) - if org_id != Organization.DEFAULT_ID: - q |= Q(m2m_org_members__role=ORG_ROLE.ADMIN, orgs__id=org_id, orgs__members=user) - org_admins = User.objects.filter(q).distinct() - - return self.get_paginated_response_with_query_set(org_admins) - def _get_extra_comment(self, instance): meta = instance.meta ips = ', '.join(meta.get('ips', [])) @@ -141,3 +128,20 @@ class RequestAssetPermTicketViewSet(JMSModelViewSet): ap.users.add(instance.user) return ap + + +class AssigneeViewSet(ListModelMixin, JmsGenericViewSet): + serializer_class = serializers.AssigneeSerializer + permission_classes = (IsValidUser,) + filter_fields = ('username', 'email', 'name', 'id', 'source') + search_fields = filter_fields + + def get_queryset(self): + user = self.request.user + org_id = self.request.query_params.get('org_id', Organization.DEFAULT_ID) + + q = Q(role=User.ROLE.ADMIN) + if org_id != Organization.DEFAULT_ID: + q |= Q(m2m_org_members__role=ORG_ROLE.ADMIN, orgs__id=org_id, orgs__members=user) + org_admins = User.objects.filter(q).distinct() + return org_admins diff --git a/apps/tickets/urls/api_urls.py b/apps/tickets/urls/api_urls.py index a7bd3f6e5..36700db92 100644 --- a/apps/tickets/urls/api_urls.py +++ b/apps/tickets/urls/api_urls.py @@ -7,6 +7,7 @@ from .. import api app_name = 'tickets' router = BulkRouter() +router.register('tickets/request-asset-perm/assignees', api.AssigneeViewSet, 'ticket-request-asset-perm-assignee') router.register('tickets/request-asset-perm', api.RequestAssetPermTicketViewSet, 'ticket-request-asset-perm') router.register('tickets', api.TicketViewSet, 'ticket') router.register('tickets/(?P[0-9a-zA-Z\-]{36})/comments', api.TicketCommentViewSet, 'ticket-comment')