Activiti中内置了一套用户、用户组关系,以及对它们的操作API。关于用户和用户组表工业四张,如下图
1、ACT_ID_USER(用户信息表)
2、ACT_ID_INFO(用户扩展信息表)
3、ACT_ID_GROUP(用户组信息表)
4、ACT_ID_MEMBERSHIP(用户与用户组关系信息表)
通常来说在项目中都已经是有了用户和角色权限功能。比如我创建了一个springboot项目,已经创建了用户表和角色表,那么如何将项目本身的用户和角色与activiti的用户、用户组整合在一起啦。
我的思路:在项目中创建了用户时,同时也需要将用户与Activiti的用户关联起来,直接通过id关联即可。
package com.springboot.activiti.eimm.leave.controller;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.zip.ZipInputStream;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
import org.activiti.engine.repository.Deployment;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.springboot.activiti.eimm.leave.dao.LeaveMapper;
import com.springboot.activiti.eimm.leave.service.LeaveService;
import lombok.extern.slf4j.Slf4j;
@Controller
@Slf4j
@RequestMapping("/leave")
public class LeaveController {
@Autowired
LeaveMapper leaveMapper;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private IdentityService identityService;
@Autowired
private RepositoryService repositoryService;
@Autowired
private ProcessEngine processEngine;
@Autowired
private HistoryService historyService;
@Autowired
private LeaveService leaveService;
//1、部署流程资源【第一种方式:classpath】
@RequestMapping("/deploy1")
public void deploy1( ){
Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
.createDeployment()//创建部署对象
.name("请假申请审核流程")//声明流程的名称
.addClasspathResource("processes/leave.bpmn")//加载资源文件,一次只能加载一个文件
.addClasspathResource("processes/leave.png")//
.deploy();//完成部署
System.out.println("部署ID:"+deployment.getId());//1
System.out.println("部署时间:"+deployment.getDeploymentTime());
}
//2、创建Activiti用户
@RequestMapping("/addUser")
public void addUser( ){
//项目中每创建一个新用户,对应的要创建一个Activiti用户,两者的userId和userName一致
//添加用户
User user1 = identityService.newUser("user1");
user1.setFirstName("张三");
user1.setLastName("张");
user1.setPassword("123456");
user1.setEmail("zhangsan@qq.com");
identityService.saveUser(user1);
User user2 = identityService.newUser("user2");
user2.setFirstName("李四");
user2.setLastName("李");
user2.setPassword("123456");
user2.setEmail("lisi@qq.com");
identityService.saveUser(user2);
User user3 = identityService.newUser("user3");
user3.setFirstName("王五");
user3.setLastName("王");
user3.setPassword("123456");
user3.setEmail("wangwu@qq.com");
identityService.saveUser(user3);
User user4 = identityService.newUser("user4");
user4.setFirstName("吴六");
user4.setLastName("吴");
user4.setPassword("123456");
user4.setEmail("wuliu@qq.com");
identityService.saveUser(user4);
}
}
启动程序:http://127.0.0.1:8080/项目名称/leave/addUser
Activiti提供很多方法来查询用户,我们这里采用根据用户id来查询
//3、根据id查询Activiti用户
@RequestMapping("/queryUser")
public void queryUser( ){
User user = identityService.createUserQuery().userId("user1").singleResult();
System.out.println(user.getId());
System.out.println(user.getFirstName());
System.out.println(user.getLastName());
System.out.println(user.getPassword());
System.out.println(user.getEmail());
}
Activiti中的用户组信息相当于权限系统当中的角色,用户可以属于多个用户组,用户组也可以包含多个用户,同一个用户组当中的用户具有相同的权限。
//4、创建Activiti用户组
@RequestMapping("/addGroup")
public void addGroup( ){
Group group1 = identityService.newGroup("group1");
group1.setName("员工组");
group1.setType("员工组");
identityService.saveGroup(group1);
Group group2 = identityService.newGroup("group2");
group2.setName("总监组");
group2.setType("总监阻");
identityService.saveGroup(group2);
Group group3 = identityService.newGroup("group3");
group3.setName("经理组");
group3.setType("经理组");
identityService.saveGroup(group3);
Group group4 = identityService.newGroup("group4");
group4.setName("人力资源组");
group4.setType("人力资源组");
identityService.saveGroup(group4);
}
//5、通过用户组id查询Activiti用户组
@RequestMapping("/queryGroup")
public void queryGroup( ){
Group group = identityService.createGroupQuery().groupId("group1").singleResult();
System.out.println(group.getId());
System.out.println(group.getName());
System.out.println(group.getType());
}
//6、创建Activiti(用户-用户组)关系
@RequestMapping("/addMembership")
public void addMembership( ){
identityService.createMembership("user1", "group1");//user1 在员工阻
identityService.createMembership("user2", "group2");//user2在总监组
identityService.createMembership("user3", "group3");//user3在经理组
identityService.createMembership("user4", "group4");//user4在人力资源组
}
//7、查询属于组group1的用户
@RequestMapping("/queryUserListByGroup")
public void queryUserListByGroup( ){
//查询属于组group1的用户
List usersInGroup = identityService.createUserQuery().memberOfGroup("group1").list();
for (User user : usersInGroup) {
System.out.println(user.getFirstName());
}
}
//8、查询user1所属于的组
@RequestMapping("/queryGroupListByUser")
public void queryGroupListByUser( ){
//查询user1所属于的组
List groupsForUser = identityService.createGroupQuery().groupMember("user1").list();
for (Group group : groupsForUser) {
System.out.println(group.getName());
}
}
如果你觉得本篇文章对你有所帮助的话,麻烦请点击头像右边的关注按钮,谢谢!
技术在交流中进步,知识在分享中传播