Activiti的节点权限控制可以在流程定义中通过配置Candidate User、Candidate Group或者使用JavaDelegate类来实现。
- Candidate User 首先,您可以为每个任务节点定义候选用户。这些用户将被授予操作该任务的权限。在Activiti中,Candidate User是指所选用户列表,这些用户成为任务的候选人。只有任务被这些候选人接受之后才能执行该任务。 任务节点的XML设置如下:
xml <userTask id="task2" name="Approve"> <extensionElements> <activiti:taskListener event="create" class="org.activiti.engine.impl.bpmn.listener.ScriptTaskListener"> <activiti:field name="script"> <activiti:string> execution.setVariable('candidateUsers', Arrays.asList('Alice', 'Bob', 'Cathy')); </activiti:string> </activiti:field> </activiti:taskListener> </extensionElements> </userTask>
-
- Candidate Group Candidate Group则与Candidate User有些相似,但是它指的是所选组中的所有用户。只有在这个组中的某个用户接受任务后,才能执行该任务。 任务节点的XML设置如下:
xml <userTask id="task1" name="User Task" activiti:assignee="${assignee}"> <extensionElements> <activiti:taskListener event="create" class="org.activiti.engine.impl.bpmn.listener.ScriptTaskListener"> <activiti:field name="script"> <activiti:string> execution.setVariable('candidateGroups', Arrays.asList('group1', 'group2', 'group3')); </activiti:string> </activiti:field> </activiti:taskListener> </extensionElements> </userTask>
- Candidate Group Candidate Group则与Candidate User有些相似,但是它指的是所选组中的所有用户。只有在这个组中的某个用户接受任务后,才能执行该任务。 任务节点的XML设置如下:
- JavaDelegate 最后,您还可以使用JavaDelegate类动态分配用户或组权限。这种方法需要您编写自己的Java代码来定义候选用户或组。 任务节点的XML设置如下:
xml <userTask id="task2" name="Approve" activiti:candidateGroups="#{groupService.getGroups(task)}" > <extensionElements> <activiti:taskListener event="create" class="org.activiti.engine.impl.bpmn.listener.ScriptTaskListener"> <activiti:field name="script"> <activiti:string> execution.setVariable('candidateUsers', customService.getCandidatesForTask(execution.getId())); </activiti:string> </activiti:field> </activiti:taskListener> </extensionElements> </userTask>
以上是Activiti的节点权限控制方式,您可以根据需要选择其中一种方式来配置流程定义