Process Initiation Authorization 流程起始授权

默认所有人在部署的流程定义上启动一个新流程实例。通过流程初始化授权功能定义的用户和组,web 客户端可以限制哪些用户可以启动一个新流程实例。 注意:Activiti 引擎不会校验授权定义。 这个功能只是为减轻 web 客户端开发者实现校验规则的难度。 设置方法与用户任务用户分配类似。 用户或组可以使用 标签分配为流程的默
认启动者。下面是一个例子:

  1. <process id="potentialStarter">
  2. <extensionElements>
  3. <activiti:potentialStarter>
  4. <resourceAssignmentExpression>
  5. <formalExpression>group2, group(group3), user(user3)</formalExpression>
  6. </resourceAssignmentExpression>
  7. </activiti:potentialStarter>
  8. </extensionElements>
  9. <startEvent id="theStart"/>
  10. ...

上面的 XML 中,user(user3) 是直接引用了用户 user3,group(group3) 是引用了组 group3。如果没显示设置,默认认为是群组。 也可以使用 标签的属性,。 下面是一个例子:

  1. <process id="potentialStarter" activiti:candidateStarterUsers="user1, user2"
  2. activiti:candidateStarterGroups="group1">
  3. ...

可以同时使用这两个属性。

定义流程初始化授权后,开发者可以使用如下方法获得授权定义。 这些代码可以获得给定的用户可以启动哪些流程定义:

  1. processDefinitions = repositoryService.createProcessDefinitionQuery().startableByUser("userxxx").list();

也可以获得指定流程定义设置的潜在启动者对应的 identity link。

  1. identityLinks = repositoryService.getIdentityLinksForProcessDefinition("processDefinitionId");

下面例子演示了如何获得可以启动给定流程的用户列表:

  1. List<User> authorizedUsers = identityService().createUserQuery().potentialStarter("processDefinitionId").list();

相同的方式,获得可以启动给定流程配置的群组:

  1. List<Group> authorizedGroups = identityService().createGroupQuery().potentialStarter("processDefinitionId").list();