mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-21 19:38:07 +00:00
perf: Approval process role selection supports multiple strategies
This commit is contained in:
@@ -3,31 +3,24 @@
|
||||
from django.db import models
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from common.db.fields import JSONManyToManyField, RelatedManager
|
||||
from common.db.models import JMSBaseModel
|
||||
from orgs.mixins.models import OrgModelMixin
|
||||
from orgs.models import Organization
|
||||
from orgs.utils import tmp_to_org, get_current_org_id
|
||||
from orgs.utils import tmp_to_org, current_org
|
||||
from users.models import User
|
||||
from ..const import TicketType, TicketLevel, TicketApprovalStrategy
|
||||
from ..const import TicketType, TicketLevel
|
||||
|
||||
__all__ = ['TicketFlow', 'ApprovalRule']
|
||||
|
||||
|
||||
class ApprovalRule(JMSBaseModel):
|
||||
level = models.SmallIntegerField(
|
||||
default=TicketLevel.one, choices=TicketLevel.choices,
|
||||
default=TicketLevel.one,
|
||||
choices=TicketLevel.choices,
|
||||
verbose_name=_('Approve level')
|
||||
)
|
||||
strategy = models.CharField(
|
||||
max_length=64, default=TicketApprovalStrategy.super_admin,
|
||||
choices=TicketApprovalStrategy.choices,
|
||||
verbose_name=_('Approve strategy')
|
||||
)
|
||||
# 受理人列表
|
||||
assignees = models.ManyToManyField(
|
||||
'users.User', related_name='assigned_ticket_flow_approval_rule',
|
||||
verbose_name=_("Assignees")
|
||||
)
|
||||
users = JSONManyToManyField('users.User', default=dict, verbose_name=_('Users'))
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('Ticket flow approval rule')
|
||||
@@ -36,17 +29,10 @@ class ApprovalRule(JMSBaseModel):
|
||||
return '{}({})'.format(self.id, self.level)
|
||||
|
||||
def get_assignees(self, org_id=None):
|
||||
assignees = []
|
||||
org_id = org_id if org_id else get_current_org_id()
|
||||
with tmp_to_org(org_id):
|
||||
if self.strategy == TicketApprovalStrategy.super_admin:
|
||||
assignees = User.get_super_admins()
|
||||
elif self.strategy == TicketApprovalStrategy.org_admin:
|
||||
assignees = User.get_org_admins()
|
||||
elif self.strategy == TicketApprovalStrategy.super_org_admin:
|
||||
assignees = User.get_super_and_org_admins()
|
||||
elif self.strategy == TicketApprovalStrategy.custom_user:
|
||||
assignees = self.assignees.all()
|
||||
org = Organization.get_instance(org_id, default=current_org)
|
||||
user_qs = User.get_org_users(org=org)
|
||||
query = RelatedManager.get_to_filter_qs(self.users.value, user_qs.model)
|
||||
assignees = user_qs.filter(*query).distinct()
|
||||
return assignees
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user