public UserOperationLogContextEntryBuilder inContextOf(JobDefinitionEntity jobDefinition) {
    entry.setJobDefinitionId(jobDefinition.getId());
    entry.setProcessDefinitionId(jobDefinition.getProcessDefinitionId());
    entry.setProcessDefinitionKey(jobDefinition.getProcessDefinitionKey());

    if (jobDefinition.getProcessDefinitionId() != null) {
      ProcessDefinitionEntity processDefinition =
          Context.getProcessEngineConfiguration()
              .getDeploymentCache()
              .findDeployedProcessDefinitionById(jobDefinition.getProcessDefinitionId());
      entry.setDeploymentId(processDefinition.getDeploymentId());
    }

    return this;
  }
  protected Integer getJobDefinitionPriority(
      ExecutionEntity execution, JobDeclaration<?> jobDeclaration) {
    String jobDefinitionId = jobDeclaration.getJobDefinitionId();

    if (jobDefinitionId != null) {
      JobDefinitionEntity jobDefinition =
          Context.getCommandContext().getJobDefinitionManager().findById(jobDefinitionId);

      if (jobDefinition != null) {
        return jobDefinition.getJobPriority();
      }
    }

    return null;
  }
  protected void checkAuthorization(CommandContext commandContext) {
    AuthorizationManager authorizationManager = commandContext.getAuthorizationManager();

    if (jobId != null) {

      JobManager jobManager = commandContext.getJobManager();
      JobEntity job = jobManager.findJobById(jobId);

      if (job != null) {

        String processInstanceId = job.getProcessInstanceId();
        if (processInstanceId != null) {
          authorizationManager.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.getProcessDefinitionKey();
          if (processDefinitionKey != null) {
            authorizationManager.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 (jobDefinitionId != null) {

      JobDefinitionManager jobDefinitionManager = commandContext.getJobDefinitionManager();
      JobDefinitionEntity jobDefinition = jobDefinitionManager.findById(jobDefinitionId);

      if (jobDefinition != null) {
        String processDefinitionKey = jobDefinition.getProcessDefinitionKey();
        authorizationManager.checkUpdateProcessInstanceByProcessDefinitionKey(processDefinitionKey);
      }

    } else if (processInstanceId != null) {
      authorizationManager.checkUpdateProcessInstanceById(processInstanceId);
    } else if (processDefinitionId != null) {
      authorizationManager.checkUpdateProcessInstanceByProcessDefinitionId(processDefinitionId);
    } else if (processDefinitionKey != null) {
      authorizationManager.checkUpdateProcessInstanceByProcessDefinitionKey(processDefinitionKey);
    }
  }