任务访问策略
任务访问策略类,用于判断给定的创建人员是否允许执行某个任务,指定合法参与者对象。
任务访问者策略接口
- 实现任务访问策略接口
TaskAccessStrategy
默认判断为当前任务执行者为合法参与者对象。
java
public interface TaskAccessStrategy {
/**
* 根据创建人ID、参与者集合判断是否允许访问所属任务
*
* @param userId 用户ID
* @param taskActors 参与者列表 传递至该接口的实现类中的参与者都是为非空
* @return boolean 是否允许访问
*/
boolean isAllowed(String userId, List<FlwTaskActor> taskActors);
/**
* 获取指定合法参与者对象
* <p>
* 被使用在:分配任务,解决委派任务 场景
* </p>
*
* @param taskId 当前任务ID
* @param taskActors 通过任务ID查询到的任务参与者列表
* @param flowCreator 任务参与者
* @return {@link FlwTaskActor}
*/
default FlwTaskActor getAllowedFlwTaskActor(Long taskId, FlowCreator flowCreator, List<FlwTaskActor> taskActors) {
Optional<FlwTaskActor> taskActorOpt = taskActors.stream().filter(t -> Objects.equals(t.getActorId(), flowCreator.getCreateId())).findFirst();
Assert.isTrue(!taskActorOpt.isPresent(), "Not authorized to perform this task");
return taskActorOpt.get();
}
}
自定义策略接口实现
该策略继承
GeneralAccessStrategy
默认实现,并重写isAllowed
方法,返回指定合法参与者对象。 所在源码位置test.mysql.config
java
public class TestTaskAccessStrategy extends GeneralAccessStrategy {
@Override
public FlwTaskActor isAllowed(String userId, List<FlwTaskActor> taskActors) {
if (null != taskActors) {
// 角色部门情况测试不做验证直接允许认领,实际生产环境必须验证
if (taskActors.stream().anyMatch(t -> !Objects.equals(0, t.getActorType()))) {
return taskActors.get(0);
}
}
return super.isAllowed(userId, taskActors);
}
}