activity权限控制(代办任务查询)


前言

  • activity提供有用户与用户组关联的权限,但是如果使用它,需要我们同步业务系统与工作流系统的数据,这样就使得系统变得复杂,维护成本增大。
  • 不用activity提供的用户权限,通过设置参数,把审核人、用户、组等组合过滤条件,对用户权限进行控制。

一、待办任务查询

1、根据办理人、候选人、候选组条件过滤
2、根据流程定义key、流程实例id等过滤
3、根据参数过滤
具体详细讲解,在代码备注中:

// 1、根据办理人、候选人、候选组条件过滤
TaskQuery taskQuery = taskService.createTaskQuery()
                .taskCandidateOrAssigned(input.getCandidateUser())
                .taskCandidateGroupIn(input.getCandidateGroups())//支持多个角色
                .includeProcessVariables().active()
                .orderByTaskCreateTime();
                
// 2、根据流程定义key、id等过滤
taskQuery.processInstanceId("procInsId");

// 3、根据参数过滤
taskQuery.processVariableValueEquals(参数名, "参数值");

// 附加排序条件
        taskQuery = input.getIsOrderByDesc() ? taskQuery.desc() : taskQuery.asc();

二、办理人、候选人、候选组

说明:
通过对待办任务组合查询,activity提供的过滤条件为:
1、优先判断办理人(审核人)assignee是否存在值,存在则按assignee过滤待办任务
2、再判断候选用户:candidateUsers、候选用户组:candidateGroups

备注:所谓的候选,就是还未确认该任务是谁,进入候选的都有可能领到任务,所以有个签领过程;候选人或候选者,签领后就确认审核人,在代码里,其实就是给assignee赋值。

java代码如下:

// 如果你明确只有审核人,可以直接添加审核人即可:.taskAssignee(“审核人”)
taskQuery = taskService.createTaskQuery()
                .taskCandidateOrAssigned(input.getCandidateUser())
                .taskCandidateGroupIn(input.getCandidateGroups())//支持多个角色
                .includeProcessVariables().active();

条件过滤的部分SQL如下:

(RES.ASSIGNEE_ = 'linShi' 
or (RES.ASSIGNEE_ is null and I.TYPE_ = 'candidate' 
    and (I.USER_ID_ = 'user1' or I.GROUP_ID_ IN ( 'groupId1' ) )

1.办理人:assignee

办理人只能指定一个人,赋值有两种方式:

代码如下(示例):

// 1、通过待办任务节点服务赋值(不需要签领)
taskService.setAssignee(taskId, assignee);

// 2、通过签领进行赋值(存在候选人或候选组时,审核节点时需要签领)
taskService.claim(taskId, assignee);

对应的数据库中会在表ACT_RU_TASK会产生数据,Assignee_字段就是设置的办理人

2.候选人:candidateUsers

使用activiti:candiateUsers=”用户 1,用户 2,用户 3”的这种方式来实现设置一组候选人。
一般情况下,我们不是写死用户,而是通过参数来赋值:创建节点时,设置参数${“candidateUsers”},然后通过参数candidateUsers进行赋值。

代码如下(示例):

// userId1必须是候选人中的一个,即所有候选人都能看到即将办理的任务
Task task = taskService.createTaskQuery().taskCandidateUser(userId1).singleResult();

//某个候选人签收
taskService.claim(task.getId(), userId1);

//userId1签领后,其他候选人看不到该任务
task2 = taskService.createTaskQuery().taskCandidateUser(userId2).singleResult();
assertNull(“找不到任务”+task2);

备注:某个候选人签收后,其他候选人就看不到该任务

3.候选组:candidateGroups

可以使用activiti:candidateGroups=”用户组1,用户组2,用户组3”的这种方式来实现设置一组候选人。
候选组,这个就是这只办理角色或者办理岗位,适合使用在办理人比较多的情况下,而且涉及到几个部门的情形。

代码如下(示例):

// groups1必须是候选组中的一个
Task task = taskService.createTaskQuery().taskCandidateGroups(groups1).singleResult();

//某个候选人签收
taskService.claim(task.getId(), userId1);

备注:某个候选组签收后,只有签领得人才能看到该任务

如果你对工作流感兴趣,想了解更多,请点击
Java工作流管理系统(activity6.0)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值