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); } } } } } } }