Activiti6自学之路(六)——Activiti中用户与用户组

Activiti中内置了一套用户、用户组关系,以及对它们的操作API。关于用户和用户组表工业四张,如下图

Activiti6自学之路(六)——Activiti中用户与用户组_第1张图片

一、用户与用户组表的介绍

1、ACT_ID_USER(用户信息表)

Activiti6自学之路(六)——Activiti中用户与用户组_第2张图片

2、ACT_ID_INFO(用户扩展信息表)
Activiti6自学之路(六)——Activiti中用户与用户组_第3张图片
3、ACT_ID_GROUP(用户组信息表)
Activiti6自学之路(六)——Activiti中用户与用户组_第4张图片
4、ACT_ID_MEMBERSHIP(用户与用户组关系信息表)
Activiti6自学之路(六)——Activiti中用户与用户组_第5张图片

二、项目中用户和角色与Activiti中的用户、用户组整合

通常来说在项目中都已经是有了用户和角色权限功能。比如我创建了一个springboot项目,已经创建了用户表和角色表,那么如何将项目本身的用户和角色与activiti的用户、用户组整合在一起啦。

我的思路:在项目中创建了用户时,同时也需要将用户与Activiti的用户关联起来,直接通过id关联即可。

三、创建Activiti用户

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

发现 act_id_user表 新增了四条用户信息
Activiti6自学之路(六)——Activiti中用户与用户组_第6张图片

四、查询Activiti用户

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用户组

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);
  	      
  	}

Activiti6自学之路(六)——Activiti中用户与用户组_第7张图片

五、查询Activiti用户组

//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());
  		 
  	}

在这里插入图片描述

六、创建Activiti(用户-用户组)关系

   //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在人力资源组
  		 
  	}

Activiti6自学之路(六)——Activiti中用户与用户组_第8张图片

七、查询属于用户组group1的用户

 //7、查询属于组group1的用户
  	@RequestMapping("/queryUserListByGroup")
  	public void queryUserListByGroup( ){	
  		 
  	    //查询属于组group1的用户
  		List usersInGroup = identityService.createUserQuery().memberOfGroup("group1").list();
  		for (User user : usersInGroup) {
			System.out.println(user.getFirstName());
		}
  		 
  	}

在这里插入图片描述

八、查询用户user1所属于的用户组

 //8、查询user1所属于的组
  	@RequestMapping("/queryGroupListByUser")
  	public void queryGroupListByUser( ){	
  		 
  	    //查询user1所属于的组
  		List groupsForUser = identityService.createGroupQuery().groupMember("user1").list();
  		for (Group group : groupsForUser) {
			System.out.println(group.getName());
		}
  		 
  	}

在这里插入图片描述


如果你觉得本篇文章对你有所帮助的话,麻烦请点击头像右边的关注按钮,谢谢!

技术在交流中进步,知识在分享中传播

你可能感兴趣的:(Activiti,工作流)