Example #1
0
        public virtual void LogJobOperation(string operation, string jobId, string jobDefinitionId, string processInstanceId, string processDefinitionId, string processDefinitionKey, PropertyChange propertyChange)
        {
            if (UserOperationLogEnabled)
            {
                UserOperationLogContext             context      = new UserOperationLogContext();
                UserOperationLogContextEntryBuilder entryBuilder = UserOperationLogContextEntryBuilder.Entry(operation, EntityTypes.Job).JobId(jobId).JobDefinitionId(jobDefinitionId).ProcessDefinitionId(processDefinitionId).ProcessDefinitionKey(processDefinitionKey).PropertyChanges(propertyChange);

                if (jobId != null)
                {
                    JobEntity job = jobManager.FindJobById(jobId);
                    // Backward compatibility
                    if (job != null)
                    {
                        entryBuilder.InContextOf(job);
                    }
                }
                else

                {
                    if (jobDefinitionId != null)
                    {
                        JobDefinitionEntity jobDefinition = jobDefinitionManager.FindById(jobDefinitionId);
                        // Backward compatibility
                        if (jobDefinition != null)
                        {
                            entryBuilder.InContextOf(jobDefinition);
                        }
                    }
                    else if (processInstanceId != null)
                    {
                        ExecutionEntity processInstance = processInstanceManager.FindExecutionById(processInstanceId);
                        // Backward compatibility
                        if (processInstance != null)
                        {
                            entryBuilder.InContextOf(processInstance);
                        }
                    }
                    else if (processDefinitionId != null)
                    {
                        ProcessDefinitionEntity definition = processDefinitionManager.FindLatestProcessDefinitionById(processDefinitionId);
                        // Backward compatibility
                        if (definition != null)
                        {
                            entryBuilder.InContextOf(definition);
                        }
                    }
                }

                context.AddEntry(entryBuilder.Create());
                FireUserOperationLog(context);
            }
        }
        protected internal override void CheckAuthorization(CommandContext commandContext)
        {
            foreach (ICommandChecker checker in commandContext.ProcessEngineConfiguration.CommandCheckers)
            {
                if (!string.ReferenceEquals(JobId, null))
                {
                    IJobManager jobManager = commandContext.JobManager;
                    JobEntity   job        = jobManager.FindJobById(JobId);

                    if (job != null)
                    {
                        string processInstanceId = job.ProcessInstanceId;
                        if (!string.ReferenceEquals(processInstanceId, null))
                        {
                            checker.CheckUpdateProcessInstanceById(processInstanceId);
                        }
                        else
                        {
                            // start timer job is not assigned to a specific process
                            // instance, that's why we have to check whether there
                            // exists a UPDATE_INSTANCES permission on process definition or
                            // a UPDATE permission on any process instance
                            string processDefinitionKey = job.ProcessDefinitionKey;
                            if (!string.ReferenceEquals(processDefinitionKey, null))
                            {
                                checker.CheckUpdateProcessInstanceByProcessDefinitionKey(processDefinitionKey);
                            }
                        }
                        // if (processInstanceId == null && processDefinitionKey == null):
                        // job is not assigned to any process instance nor process definition
                        // then it is always possible to activate/suspend the corresponding job
                        // -> no authorization check necessary
                    }
                }
                else
                {
                    if (!string.IsNullOrEmpty(JobDefinitionId))
                    {
                        JobDefinitionEntity jobDefinition = commandContext.JobDefinitionManager.FindById(JobDefinitionId);

                        if (jobDefinition != null)
                        {
                            string processDefinitionKey = jobDefinition.ProcessDefinitionKey;
                            checker.CheckUpdateProcessInstanceByProcessDefinitionKey(processDefinitionKey);
                        }
                    }
                    else
                    {
                        if (!string.ReferenceEquals(ProcessInstanceId, null))
                        {
                            checker.CheckUpdateProcessInstanceById(ProcessInstanceId);
                        }
                        else
                        {
                            if (!string.ReferenceEquals(ProcessDefinitionId, null))
                            {
                                checker.CheckUpdateProcessInstanceByProcessDefinitionId(ProcessDefinitionId);
                            }
                            else
                            {
                                if (!string.ReferenceEquals(ProcessDefinitionKey, null))
                                {
                                    checker.CheckUpdateProcessInstanceByProcessDefinitionKey(ProcessDefinitionKey);
                                }
                            }
                        }
                    }
                }
            }
        }