mirror of https://github.com/jumpserver/jumpserver
134 lines
6.0 KiB
Python
134 lines
6.0 KiB
Python
from django.utils.translation import ugettext as __
|
|
from orgs.utils import tmp_to_org, tmp_to_root_org
|
|
from applications.models import Application
|
|
from applications.const import ApplicationCategoryChoices, ApplicationTypeChoices
|
|
from assets.models import SystemUser
|
|
from perms.models import ApplicationPermission
|
|
from tickets.utils import convert_model_instance_data_field_name_to_verbose_name
|
|
|
|
|
|
class ConstructDisplayFieldMixin:
|
|
def construct_meta_apply_application_open_fields_display(self):
|
|
meta_display_fields = ['apply_category_display', 'apply_type_display']
|
|
apply_category = self.meta['apply_category']
|
|
apply_category_display = ApplicationCategoryChoices.get_label(apply_category)
|
|
apply_type = self.meta['apply_type']
|
|
apply_type_display = ApplicationTypeChoices.get_label(apply_type)
|
|
meta_display_values = [apply_category_display, apply_type_display]
|
|
meta_display = dict(zip(meta_display_fields, meta_display_values))
|
|
return meta_display
|
|
|
|
def construct_meta_apply_application_approve_fields_display(self):
|
|
meta_display_fields = ['approve_applications_snapshot', 'approve_system_users_snapshot']
|
|
approve_applications_id = self.meta['approve_applications']
|
|
approve_system_users_id = self.meta['approve_system_users']
|
|
with tmp_to_org(self.org_id):
|
|
approve_applications_snapshot = list(
|
|
Application.objects.filter(id__in=approve_applications_id).values(
|
|
'name', 'category', 'type'
|
|
)
|
|
)
|
|
approve_system_users_snapshot = list(
|
|
SystemUser.objects.filter(id__in=approve_system_users_id).values(
|
|
'name', 'username', 'username_same_with_user', 'protocol',
|
|
'auto_push', 'sudo', 'home', 'sftp_root'
|
|
)
|
|
)
|
|
meta_display_values = [approve_applications_snapshot, approve_system_users_snapshot]
|
|
meta_display = dict(zip(meta_display_fields, meta_display_values))
|
|
return meta_display
|
|
|
|
|
|
class ConstructBodyMixin:
|
|
|
|
def construct_apply_application_applied_body(self):
|
|
apply_category_display = self.meta['apply_category_display']
|
|
apply_type_display = self.meta['apply_type_display']
|
|
apply_application_group = self.meta['apply_application_group']
|
|
apply_system_user_group = self.meta['apply_system_user_group']
|
|
apply_date_start = self.meta['apply_date_start']
|
|
apply_date_expired = self.meta['apply_date_expired']
|
|
applied_body = '''{}: {},
|
|
{}: {},
|
|
{}: {},
|
|
{}: {},
|
|
{}: {},
|
|
{}: {},
|
|
'''.format(
|
|
__('Applied category'), apply_category_display,
|
|
__('Applied type'), apply_type_display,
|
|
__('Applied application group'), apply_application_group,
|
|
__('Applied system user group'), apply_system_user_group,
|
|
__('Applied date start'), apply_date_start,
|
|
__('Applied date expired'), apply_date_expired,
|
|
)
|
|
return applied_body
|
|
|
|
def construct_apply_application_approved_body(self):
|
|
# 审批信息
|
|
approve_applications_snapshot = self.meta['approve_applications_snapshot']
|
|
approve_applications_snapshot_display = convert_model_instance_data_field_name_to_verbose_name(
|
|
Application, approve_applications_snapshot
|
|
)
|
|
approve_system_users_snapshot = self.meta['approve_system_users_snapshot']
|
|
approve_system_users_snapshot_display = convert_model_instance_data_field_name_to_verbose_name(
|
|
SystemUser, approve_system_users_snapshot
|
|
)
|
|
approve_date_start = self.meta['approve_date_start']
|
|
approve_date_expired = self.meta['approve_date_expired']
|
|
approved_body = '''{}: {},
|
|
{}: {},
|
|
{}: {},
|
|
{}: {},
|
|
'''.format(
|
|
__('Approved applications'), approve_applications_snapshot_display,
|
|
__('Approved system users'), approve_system_users_snapshot_display,
|
|
__('Approved date start'), approve_date_start,
|
|
__('Approved date expired'), approve_date_expired
|
|
)
|
|
return approved_body
|
|
|
|
|
|
class CreatePermissionMixin:
|
|
|
|
def create_apply_application_permission(self):
|
|
with tmp_to_root_org():
|
|
application_permission = ApplicationPermission.objects.filter(id=self.id).first()
|
|
if application_permission:
|
|
return application_permission
|
|
|
|
apply_category = self.meta['apply_category']
|
|
apply_type = self.meta['apply_type']
|
|
approved_applications_id = self.meta['approve_applications']
|
|
approve_system_users_id = self.meta['approve_system_users']
|
|
approve_date_start = self.meta['approve_date_start']
|
|
approve_date_expired = self.meta['approve_date_expired']
|
|
permission_name = '{}({})'.format(
|
|
__('Created by ticket ({})'.format(self.title)), str(self.id)[:4]
|
|
)
|
|
permission_comment = __(
|
|
'Created by the ticket, '
|
|
'ticket title: {}, '
|
|
'ticket applicant: {}, '
|
|
'ticket processor: {}, '
|
|
'ticket ID: {}'
|
|
''.format(self.title, self.applicant_display, self.processor_display, str(self.id))
|
|
)
|
|
permissions_data = {
|
|
'id': self.id,
|
|
'name': permission_name,
|
|
'category': apply_category,
|
|
'type': apply_type,
|
|
'comment': permission_comment,
|
|
'created_by': '{}:{}'.format(str(self.__class__.__name__), str(self.id)),
|
|
'date_start': approve_date_start,
|
|
'date_expired': approve_date_expired,
|
|
}
|
|
with tmp_to_org(self.org_id):
|
|
application_permission = ApplicationPermission.objects.create(**permissions_data)
|
|
application_permission.users.add(self.applicant)
|
|
application_permission.applications.set(approved_applications_id)
|
|
application_permission.system_users.set(approve_system_users_id)
|
|
|
|
return application_permission
|