Esempio n. 1
0
    def add_workflow(cls, name: str, description: str, notices: str, view_permission_check: int, limit_expression: str,
                     display_form_str: str, creator: str, workflow_admin: str, title_template: str,
                     content_template: str, intervener: str, view_depts:str, view_persons:str, api_permission_apps:str)->tuple:
        """
        新增工作流
        add workflow
        :param name:
        :param description:
        :param notices:
        :param view_permission_check:
        :param limit_expression:
        :param display_form_str:
        :param creator:
        :param workflow_admin:
        :param title_template:
        :param content_template:
        :return:
        """
        workflow_obj = Workflow(name=name, description=description, notices=notices,
                                view_permission_check=view_permission_check, limit_expression=limit_expression,
                                display_form_str=display_form_str, creator=creator, title_template=title_template,
                                content_template=content_template)
        workflow_obj.save()

        intervener_list = intervener.split(',') if intervener else []
        workflow_admin_list = workflow_admin.split(',') if workflow_admin else []
        view_depts_list = view_depts.split(',') if view_depts else []
        view_persons_list = view_persons.split(',') if view_persons else []
        api_permission_app_list = api_permission_apps.split(',') if api_permission_apps else []

        workflow_id = workflow_obj.id
        need_add_permission_queryset = []
        for need_add_intervener in intervener_list:
            need_add_permission_queryset.append(WorkflowUserPermission(
                workflow_id=workflow_id, permission='intervene', user_type='user', user=need_add_intervener))

        for need_add_admin in workflow_admin_list:
            need_add_permission_queryset.append(WorkflowUserPermission(
                workflow_id=workflow_id, permission='admin', user_type='user', user=need_add_admin))

        for need_add_view_depts in view_depts_list:
            need_add_permission_queryset.append(WorkflowUserPermission(
                workflow_id=workflow_id, permission='view', user_type='department', user=need_add_view_depts))

        for need_add_view_persons in view_persons_list:
            need_add_permission_queryset.append(WorkflowUserPermission(
                workflow_id=workflow_id, permission='view', user_type='user', user=need_add_view_persons))

        for need_add_app in api_permission_app_list:
            need_add_permission_queryset.append(WorkflowUserPermission(
                workflow_id=workflow_id, permission='api', user_type='app', user=need_add_app))

        WorkflowUserPermission.objects.bulk_create(need_add_permission_queryset)

        return True, dict(workflow_id=workflow_obj.id)
Esempio n. 2
0
    def add_token_record(cls, app_name: str, ticket_sn_prefix: str,
                         workflow_ids: str, username: str) -> tuple:
        """
        add app token record
        :param app_name:
        :param ticket_sn_prefix:
        :param workflow_ids:
        :param username:
        :return:
        """
        import uuid
        token = uuid.uuid1()
        app_token_obj = AppToken(app_name=app_name,
                                 ticket_sn_prefix=ticket_sn_prefix,
                                 token=token,
                                 creator=username)
        app_token_obj.save()

        from apps.workflow.models import WorkflowUserPermission
        permission_sql_list = []
        for workflow_id in workflow_ids.split(','):
            permission_sql_list.append(
                WorkflowUserPermission(workflow_id=int(workflow_id),
                                       permission='api',
                                       user_type='app',
                                       user=app_name))
        WorkflowUserPermission.objects.bulk_create(permission_sql_list)

        return True, dict(app_token_id=app_token_obj.id)
Esempio n. 3
0
    def update_app_permission(self, app_name, workflow_ids):
        """
        更新应用的权限
        :param app_name:
        :param workflow_ids:
        :return:
        """
        workflow_id_list = [int(workflow_id) for workflow_id in workflow_ids.split(',')]
        permission_query_set = WorkflowUserPermission.objects.filter(
            is_deleted=0, permission='api', user_type='app', user=app_name).all()
        exist_workflow_id_list = [permission_query.workflow_id for permission_query in permission_query_set]

        flag, need_add_workflow_list = common_service_ins.list_difference(workflow_id_list, exist_workflow_id_list)

        if flag is False:
            return False, need_add_workflow_list

        flag, need_del_workflow_list = common_service_ins.list_difference(exist_workflow_id_list, workflow_id_list)
        if flag is False:
            return False, need_del_workflow_list

        add_permission_query_list = []
        for workflow_id in need_add_workflow_list:
            add_permission_query_list.append(WorkflowUserPermission(permission='api', user_type='app', user=app_name, workflow_id=workflow_id))
        WorkflowUserPermission.objects.bulk_create(add_permission_query_list)

        WorkflowUserPermission.objects.filter(
            is_deleted=0, permission='api', user_type='app', user=app_name, workflow_id__in=need_del_workflow_list).update(is_deleted=1)

        return True, ''
Esempio n. 4
0
    def edit_workflow(cls, workflow_id: int, name: str, description: str, notices: str, view_permission_check: int,
                      limit_expression: str, display_form_str: str, workflow_admin: str, title_template: str,
                      content_template: str, intervener: str, view_depts: str, view_persons: str, api_permission_apps:str)->tuple:
        """
        更新工作流
        update workfow
        :param workflow_id:
        :param name:
        :param description:
        :param notices:
        :param view_permission_check:
        :param limit_expression:
        :param display_form_str:
        :param workflow_admin:
        :param title_template:
        :param content_template:
        :return:
        """
        workflow_obj = Workflow.objects.filter(id=workflow_id, is_deleted=0)
        if workflow_obj:
            workflow_obj.update(name=name, description=description, notices=notices,
                                view_permission_check=view_permission_check,
                                limit_expression=limit_expression, display_form_str=display_form_str,
                                title_template=title_template, content_template=content_template)
        # 更新管理员信息
        workflow_permission_existed_queryset = WorkflowUserPermission.objects.filter(workflow_id=workflow_id).all()

        existed_intervener,  existed_workflow_admin, existed_view_depts, existed_view_persons, \
        existed_app_permission_apps = [], [], [], [], []
        for workflow_permission_existed in workflow_permission_existed_queryset:
            if workflow_permission_existed.permission == 'intervene':
                existed_intervener.append(workflow_permission_existed.user)
            if workflow_permission_existed.permission == 'admin':
                existed_workflow_admin.append(workflow_permission_existed.user)
            if workflow_permission_existed.permission == 'view' and workflow_permission_existed.user_type == 'department':
                existed_view_depts.append(workflow_permission_existed.user)
            if workflow_permission_existed.permission == 'view' and workflow_permission_existed.user_type == 'user':
                existed_view_persons.append(workflow_permission_existed.user)
            if workflow_permission_existed.permission == 'api' and workflow_permission_existed.user_type == 'app':
                existed_app_permission_apps.append(workflow_permission_existed.user)

        # need del

        intervener_list = intervener.split(',') if intervener else []
        workflow_admin_list = workflow_admin.split(',') if workflow_admin else []
        view_depts_list = view_depts.split(',') if view_depts else []
        view_persons_list = view_persons.split(',') if view_persons else []
        api_list = api_permission_apps.split(',') if api_permission_apps else []


        flag, need_del_intervener_list = common_service_ins.list_subtraction(existed_intervener, intervener_list)

        flag, need_del_admin_list = common_service_ins.list_subtraction(existed_workflow_admin, workflow_admin_list)

        flag, need_del_view_depts_list = common_service_ins.list_subtraction(existed_view_depts, view_depts_list)

        flag, need_del_view_persons_list = common_service_ins.list_subtraction(existed_view_persons, view_persons_list)

        flag, need_del_app_list = common_service_ins.list_subtraction(existed_app_permission_apps, api_list)

        WorkflowUserPermission.objects.filter(
            Q(workflow_id=workflow_id, permission='intervene', user_type='user', user__in=need_del_intervener_list) |
            Q(workflow_id=workflow_id, permission='admin', user_type='user', user__in=need_del_admin_list) |
            Q(workflow_id=workflow_id, permission='view', user_type='user', user__in=need_del_view_persons_list) |
            Q(workflow_id=workflow_id, permission='view', user_type='department', user__in=need_del_view_depts_list) |
            Q(workflow_id=workflow_id, permission='api', user_type='app', user__in=need_del_app_list)
        ).update(is_deleted=1)

        # need add
        flag, need_add_intervener_list = common_service_ins.list_subtraction(intervener_list, existed_intervener)
        flag, need_add_admin_list = common_service_ins.list_subtraction(workflow_admin_list, existed_workflow_admin)
        flag, need_add_view_depts_list = common_service_ins.list_subtraction(view_depts_list, existed_view_depts)
        flag, need_add_view_persons_list = common_service_ins.list_subtraction(view_persons_list, existed_view_persons)
        flag, need_add_app_list = common_service_ins.list_subtraction(api_list, existed_app_permission_apps)

        need_add_permission_queryset = []
        for need_add_intervener in need_add_intervener_list:
            need_add_permission_queryset.append(WorkflowUserPermission(
                workflow_id=workflow_id, permission='intervene', user_type='user', user=need_add_intervener))

        for need_add_admin in need_add_admin_list:
            need_add_permission_queryset.append(WorkflowUserPermission(
                workflow_id=workflow_id, permission='admin', user_type='user', user=need_add_admin))

        for need_add_view_depts in need_add_view_depts_list:
            need_add_permission_queryset.append(WorkflowUserPermission(
                workflow_id=workflow_id, permission='view', user_type='department', user=need_add_view_depts))

        for need_add_view_persons in need_add_view_persons_list:
            need_add_permission_queryset.append(WorkflowUserPermission(
                workflow_id=workflow_id, permission='view', user_type='user', user=need_add_view_persons))

        for need_add_app in need_add_app_list:
            need_add_permission_queryset.append(WorkflowUserPermission(
                workflow_id=workflow_id, permission='api', user_type='app', user=need_add_app))

        WorkflowUserPermission.objects.bulk_create(need_add_permission_queryset)

        return True, ''