jbpm 关于动态用户组动态分配,及流程权限解决方案 思路分享
我这边需求场景是每个审批环节为下个审批节点选择某个角色后,下个节点的人员才能确定。jbpm原有的组用户这3张权限控制满足这种情况。
我分享一下现在的应急做法,(还是希望有别的更好的解决方案,大家分享出来共同学习)
思路:
1、我在系统中定义了一张流程权限控制记录表。
字段的话比如是:流程定义key,流程实例,taskname,初始任务接受人(一个非真实人名),角色ID,最终任务领用人。大概就这些字段。
2、流程图还是用<task assignee="#{groupleader}"这种方式,不用组方式(放弃那3张表)
3、申请人提交单子时,往这张表记录一条数据,“初始任务接受人”字段可以先存个groupleader字符串。
4、当前用户查看任务列表时,用当前用户的角色ID去查找“初始任务接受人”字段,能找到“初始任务接受人”字段的就可以findPersonalTasks(),查询任务列表了。(权限也差不多在这控制了)
5、打开查看一个任务提交审批意见时,先要用当前用户userId把jbpm数据库中存的“初始任务接受人”替换掉。用户组的方式jbpm有个任务领用接口takeTask(),但这里不能这么用。好在jbpm还有个接口可以投机取巧一下,就是转交任务接口assignTask(),可以将之前的“初始任务接受人(一个非真实人名)”替换掉了,将任务转交给自己。接下来在完成任务。
6、当然任务竞争领用之类的也可以在系统中控制了。
这样的话改造量最小,而且还在继续使用系统中人员、部门、角色、权限等现有数据。
有时候往往不能在流程发布时就能确定下个节点的审批人员,都要动态地。
这方式可行的最大一个点是转交任务接口assignTask(),要不是知道这个接口也不会这么设计了。
不过这种方案还是不够好,只是应急解决了,论坛中都在说IdentitySession,这个我不是很了解,现在还不能触类旁通。
希望大家对这个解决方案提出些质疑或漏洞。
希望大家有好的解决方案实例分享。