当前位置: 首页 > news >正文

第五章 activiti流程 “权限与部署指挥部”

一、用户与组——流程世界的“工牌与部门”

1. 用户管理(工牌颁发)
  • 核心表ACT_ID_USER(存储用户信息)
  • 代码操作
    IdentityService identityService = engine.getIdentityService();  
    // 创建用户  
    User user = identityService.newUser("zhangsan");  
    user.setFirstName("三");  
    user.setLastName("张");  
    user.setEmail("zhangsan@company.com");  
    identityService.saveUser(user);  
    
    // 查询用户  
    User dbUser = identityService.createUserQuery().userId("zhangsan").singleResult();  
    

避坑指南:用户ID必须唯一,建议用工号或用户名!

2. 组管理(部门划分)
  • 核心表ACT_ID_GROUP(部门/角色信息)
  • 代码操作
    // 创建组(如部门或角色)  
    Group group = identityService.newGroup("hr");  
    group.setName("人力资源部");  
    group.setType("department");  // 类型:department/role等  
    identityService.saveGroup(group);  
    
    // 查询组  
    Group hrGroup = identityService.createGroupQuery().groupId("hr").singleResult();  
    

二、用户与组的关系——分配“部门工牌”

1. 用户加入组
identityService.createMembership("zhangsan", "hr");  // 用户zhangsan加入hr组  
2. 查询组内成员
List<User> hrMembers = identityService.createUserQuery()  
    .memberOfGroup("hr")  
    .list();  // 获取人力资源部所有成员  

趣味测试❓
如果用户同时属于多个组(如hrmanager),如何查询他所有任务?
答案:用.memberOfGroup("hr").memberOfGroup("manager")链式调用!


三、流程部署——发布“作战计划”

1. 部署方式三连击
方式代码示例适用场景
Classpath资源部署.addClasspathResource("processes/leave.bpmn")开发环境快速测试
ZIP压缩包部署.addZipInputStream(zipStream)批量部署流程图+表单
数据库直接部署.addBytes("leave.bpmn", bpmnBytes)动态生成流程文件的场景
2. 代码实战
RepositoryService repositoryService = engine.getRepositoryService();  
Deployment deployment = repositoryService.createDeployment()  
    .name("请假流程V2.0")  
    .addClasspathResource("processes/leave.bpmn")  
    .addClasspathResource("forms/leave-form.xml")  
    .deploy();  // 执行部署!  

System.out.println("部署ID:" + deployment.getId());  
3. 部署验证
// 查询流程定义  
ProcessDefinition processDef = repositoryService.createProcessDefinitionQuery()  
    .deploymentId(deployment.getId())  
    .singleResult();  
// 验证结果  
assert processDef != null : "流程部署失败!";  

四、高级权限控制——动态任务分配

1. 任务候选人设置

在BPMN中配置用户组为任务候选人:

<userTask id="hrApprove" name="HR审批">  
  <extensionElements>  
    <activiti:candidateGroups>hr</activiti:candidateGroups>  
  </extensionElements>  
</userTask>  
2. 代码中认领任务
Task task = taskService.createTaskQuery().taskCandidateGroup("hr").singleResult();  
taskService.claim(task.getId(), "zhangsan");  // 张三认领HR审批任务  

五、避坑指南——权限与部署的“暗雷”

1. 用户组未绑定任务

症状:任务查询为空,但流程已启动。
检查项

  • BPMN中是否配置了activiti:candidateUsersactiviti:candidateGroups
2. 部署资源冲突

症状:重复部署同名流程导致版本混乱。
解法

  • 查询已部署流程,先删除旧版本:
    repositoryService.deleteDeployment(oldDeploymentId, true);  // true表示级联删除  
    

六、课后挑战——巩固你的“管理权杖”

  1. 选择题:删除用户时,如果用户已关联任务,会发生什么?
    A. 自动解除关联
    B. 抛出异常
    C. 任务被删除

  2. 实战题:创建一个“财务部”组,将用户“lisi”加入,并部署一个报销流程,任务候选人设为财务部。


相关文章:

  • Zotero外接通义千问 API进行翻译
  • 跟着源码实现LevelDB(二)util/status.cc
  • 独立开发增长黑客教程
  • 让deepseek更专业的提示词教程
  • CSS Selectors
  • Canvas修仙传·第三重天金丹境(上集) ——九转游戏开发心法之《灵蛇奇谭》
  • Netty是怎么实现Java NIO多路复用的?(源码)
  • 【愚公系列】《Python网络爬虫从入门到精通》037-文件的存取
  • 微软具身智能感知交互多面手!Magma:基于基础模型的多模态AI智能体
  • 初识SQL
  • 在 macOS 使用 .pem 私钥免密登录腾讯云服务器
  • java高级(IO流多线程)
  • 【愚公系列】《Python网络爬虫从入门到精通》036-DataFrame日期数据处理
  • GPT-4.5实际性能评测:实际探索
  • 3475相或为k
  • 1-PostgreSQL 简介
  • huggingface下载模型到本地缓存环境变量配置详解
  • 《每天读一个JDK源码》之HashMap解读
  • Python线程池知多少
  • 【Qt】ffmpeg照片提取、视频播放▲
  • 做网站服务器内存/免费软件下载网站有哪些
  • 网站引导页flash/如何进行搜索引擎营销
  • 长沙网站制作公司地址/电商运营推广是做什么的
  • 长春市建设局网站/百度公司官网首页
  • dw网站log怎么做/拉新推广怎么做代理
  • 佛山做网站格/教育培训网站模板