mirror of https://github.com/jumpserver/jumpserver
feat: 支持具有超级工单权限的用户申请工单可以指定申请人
parent
ad7647c0cc
commit
2454a07d38
|
@ -63,8 +63,6 @@ class TicketViewSet(CommonApiMixin, viewsets.ModelViewSet):
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
instance = serializer.save()
|
instance = serializer.save()
|
||||||
instance.applicant = self.request.user
|
|
||||||
instance.save(update_fields=['applicant'])
|
|
||||||
instance.open()
|
instance.open()
|
||||||
|
|
||||||
@action(detail=False, methods=[POST], permission_classes=[RBACPermission, ])
|
@action(detail=False, methods=[POST], permission_classes=[RBACPermission, ])
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from users.models import User
|
||||||
from orgs.models import Organization
|
from orgs.models import Organization
|
||||||
from orgs.mixins.serializers import OrgResourceModelSerializerMixin
|
from orgs.mixins.serializers import OrgResourceModelSerializerMixin
|
||||||
from tickets.models import Ticket, TicketFlow
|
from tickets.models import Ticket, TicketFlow
|
||||||
|
@ -70,6 +71,7 @@ class TicketApplySerializer(TicketSerializer):
|
||||||
org_id = serializers.CharField(
|
org_id = serializers.CharField(
|
||||||
required=True, max_length=36, allow_blank=True, label=_("Organization")
|
required=True, max_length=36, allow_blank=True, label=_("Organization")
|
||||||
)
|
)
|
||||||
|
applicant = serializers.CharField(required=False, allow_blank=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Ticket
|
model = Ticket
|
||||||
|
@ -78,6 +80,15 @@ class TicketApplySerializer(TicketSerializer):
|
||||||
'type': {'required': True}
|
'type': {'required': True}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_applicant(self, applicant_id):
|
||||||
|
current_user = self.context['request'].user
|
||||||
|
want_applicant = User.objects.filter(id=applicant_id).first()
|
||||||
|
if want_applicant and current_user.has_perm('tickets.add_superticket'):
|
||||||
|
applicant = want_applicant
|
||||||
|
else:
|
||||||
|
applicant = current_user
|
||||||
|
return applicant
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def validate_org_id(org_id):
|
def validate_org_id(org_id):
|
||||||
org = Organization.get_instance(org_id)
|
org = Organization.get_instance(org_id)
|
||||||
|
@ -98,4 +109,6 @@ class TicketApplySerializer(TicketSerializer):
|
||||||
else:
|
else:
|
||||||
error = _('The ticket flow `{}` does not exist'.format(ticket_type))
|
error = _('The ticket flow `{}` does not exist'.format(ticket_type))
|
||||||
raise serializers.ValidationError(error)
|
raise serializers.ValidationError(error)
|
||||||
|
|
||||||
|
attrs['applicant'] = self.get_applicant(attrs.get('applicant'))
|
||||||
return attrs
|
return attrs
|
||||||
|
|
Loading…
Reference in New Issue