请选择 进入手机版 | 继续访问电脑版

工作流第六章之用户组与用户

[复制链接]
滚雪球少年 发表于 2021-1-2 19:45:35 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
某些企业会将相同职能的人作为一类人举行管理,也会有某些企业,将相同的脚色(职能差别)作为一类人举行管理,这些种别就是本章所说的用户组。Activiti中用户组对应的表为ACT_ID_GROUP,该表只有4个字段。
Group对象
Group是一个接口,一个Group实例体现一条用户组数据,对应的表为ACT_ID_GROUP。该接口只提供了相应字段的getter和setter方法,这种数据与对象的映射关系,在各个ORM框架中使用很广泛,比方Hibernate、MyBatis等。
GroupEntity中包罗以下映射属性。
➢ id:主键,对应ACT_ID_GROUP表的ID_列。
➢ name:用户组名称,对应ACT_ID_GROUP表的NAME_列。
➢ type:用户组范例,对应ACT_ID_GROUP表的TYPE_列。
➢ revision:该用户组数据的版本,对应ACT_ID_GROUP表的REV_列。
添加用户
  1. package org.crazyit.activiti;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;/** * 添加用户组 * @author yangenxiong * */public class AddGroup {        public static void main(String[] args) {                // 创建默认的流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 生成UUID                String genId = UUID.randomUUID().toString();                //调用newGroup方法创建Group实例                Group group = identityService.newGroup(genId);                group.setName("司理组");                group.setType("manager");                //生存Group到数据库                identityService.saveGroup(group);                // 查询用户组                Group data = identityService.createGroupQuery().groupId(genId).singleResult();                // 生存后查询Group                System.out.println("Group ID:" + data.getId() + ", Name:" + data.getName());//                // 设置名称 //                data.setName("司理2组");//                identityService.saveGroup(data);//                // 再次查询//                data = identityService.createGroupQuery().groupId(genId).singleResult();//                System.out.println("Group ID:" + data.getId() + ", Name:" + data.getName());        }}
复制代码
删除用户
  1. package org.crazyit.activiti;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;/** * 添加用户组 *  * @author yangenxiong *  */public class DeleteGroup {        public static void main(String[] args) {                // 创建默认的流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                String genId = UUID.randomUUID().toString();                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(genId);                group.setName("司理组");                group.setType("manager");                // 生存Group到数据库                identityService.saveGroup(group);                // 查询用户组                System.out.println("生存后用户组数量:"                                + identityService.createGroupQuery().count());                // 根据ID删除用户组                identityService.deleteGroup(genId);                System.out.println("删除后用户组数量:"                                + identityService.createGroupQuery().count());        }}
复制代码
Activiti数据查询
Activiti提供了一套数据查询API提供给开发者使用,可以使用各个服务组件的createXXXQuery方法来获取这些查询对象。
查询对象
Activiti的各个服务组件(XXXService)均提供了createXXXQuery方法,比方IdentityService中的createGroupQuery方法和createUserQuery方法,TaskService中的craeteTaskQuery方法等。这些方法返回一个Query实例,比方createGroupQuery返回GroupQuery,GroupQuery是Query的子接口。
Query是所有查询对象的父接口,该接口中界说了若干个根本方法,各个查询对象均可以使用这些公共方法,包罗设置排序方式、数据量统计(count)、列表、分页和唯一记载查询。这些方法形貌如下。
➢ asc:设置查询效果的排序方式为升序。
➢ count:盘算查询效果的数据量。
➢ desc:设置查询效果的排序方式为降序。
➢ list:封装查询效果,返回相应范例的聚集。
➢ listPage:分页返回查询效果。
➢ singleResult:查询单条符合条件的数据,如果查询不到,则返回 null;如果查询到多条记载,则抛出异常。
List方法
Query接口的list方法,将查询对象对应的实体数据以聚集形式返回,对于返回的聚集要指定特定的元素范例。如果没有查询条件,则会将表中的全部的数据查出,默认按照主键升序排序。
创建activiti.cfg.xml设置文件
  1.                                                                                                
复制代码
创建log4j.properties设置文件
  1. # Set root category priority to INFO and its only appender to CONSOLE.log4j.rootCategory=INFO, CONSOLE#log4j.rootCategory=INFO, CONSOLE, LOGFILE# Set the enterprise logger category to FATAL and its only appender to CONSOLE.log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE# CONSOLE is set to be a ConsoleAppender using a PatternLayout.log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1} - %m%nlog4j.logger.org.apache=INFOlog4j.logger.org.htmlparser=INFOlog4j.logger.org.htmlparser=INFOlog4j.logger.org.crazyit=DEBUGlog4j.logger.org.drools=DEBUGlog4j.logger.org.mule=ERRORlog4j.logger.org.springframework=ERROR
复制代码
测试
  1. package org.crazyit.activiti;import java.util.List;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;/** * 使用Query的list方法 *  * @author yangenxiong *  */public class ListData {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                                // 写入5条用户组数据                createGroup(identityService, "1", "GroupA", "typeA");                createGroup(identityService, "2", "GroupB", "typeB");                createGroup(identityService, "3", "GroupC", "typeC");                createGroup(identityService, "4", "GroupD", "typeD");                createGroup(identityService, "5", "GroupE", "typeE");                // 使用list方法查询全部的摆设数据                List datas = identityService.createGroupQuery().list();                for (Group data : datas) {                        System.out.println(data.getId() + "---" + data.getName() + " ");                }        }        // 将用户组数据生存到数据库中        static void createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);        }}
复制代码
listPage方法与list方法雷同,最终也是以主键升序排序返回效果集,与list方法不一样的是,listPage方法需要提供两个int参数,第一个参数为数据的开始索引,从0开始,第二个参数为效果数量,不丢脸出,该方法适用于分页查询。
  1. package org.crazyit.activiti;import java.util.List;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;/** * 使用Query的listPage方法 * @author yangenxiong * */public class ListPage {        /**         * @param args         */        public static void main(String[] args) {                //创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 写入5条用户组数据                createGroup(identityService, "1", "GroupA", "typeA");                createGroup(identityService, "2", "GroupB", "typeB");                createGroup(identityService, "3", "GroupC", "typeC");                createGroup(identityService, "4", "GroupD", "typeD");                createGroup(identityService, "5", "GroupE", "typeE");                //调用listPage方法,从索引为2的记载开始,查询3条记载                List datas = identityService.createGroupQuery().listPage(2, 3);                for (Group data : datas) {                        System.out.println(data.getId() + "---" + data.getName() + " ");                }        }                // 将用户组数据生存到数据库中        static void createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);        }}
复制代码
  1. 22:44:25,328  INFO DbSqlSession - performing create on identity with resource org/activiti/db/create/activiti.mysql.create.identity.sql22:44:25,329  INFO DbSqlSession - Found MySQL: majorVersion=5 minorVersion=722:44:25,449  INFO ProcessEngineImpl - ProcessEngine default created22:44:25,483  INFO ProcessEngines - initialised process engine default3---GroupC 4---GroupD 5---GroupE
复制代码
count方法
该方法用于盘算查询效果的数据量,雷同于SQL中的SELECT COUNT语句,如果不加任何条件,将会统计整个表的数据量。
  1. package org.crazyit.activiti;import java.util.List;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;/** * 使用Query的count方法 *  * @author yangenxiong *  */public class Count {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 写入5条用户组数据                createGroup(identityService, UUID.randomUUID().toString(), "GroupA", "typeA");                createGroup(identityService, UUID.randomUUID().toString(), "GroupB", "typeB");                createGroup(identityService, UUID.randomUUID().toString(), "GroupC", "typeC");                createGroup(identityService, UUID.randomUUID().toString(), "GroupD", "typeD");                createGroup(identityService, UUID.randomUUID().toString(), "GroupE", "typeE");                // 使用list方法查询全部的摆设数据                long size = identityService.createGroupQuery().count();                System.out.println("Group 数量:" + size);        }        // 将用户组数据生存到数据库中        static void createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);        }}
复制代码
排序方法
Query中提供了asc和desc方法,使用这两个方法可以设置查询效果的排序方式,但是调用这两个方法的前提是,必须告诉Query对象,按何种条件举行排序,比方要按照ID排序,就要调用相应查询对象的orderByXXX方法,大概GroupQuery的orderByGroupId、orderByGroupName等方法,如果不调用这些方法而直接使用asc大概desc方法,则会抛出ActivitiException,异常信息为:You should call any of the orderBy methods first before specifying a direction。要求Activiti举行排序,却不告诉它以哪个字段举行排序,因此会抛出异常。
  1. package org.crazyit.activiti;import java.util.List;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;/** * Query的排序 * @author yangenxiong * */public class Sort {        /**         * @param args         */        public static void main(String[] args) {                //创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 写入5条用户组数据                createGroup(identityService, UUID.randomUUID().toString(), "1", "typeA");                createGroup(identityService, UUID.randomUUID().toString(), "2", "typeB");                createGroup(identityService, UUID.randomUUID().toString(), "3", "typeC");                createGroup(identityService, UUID.randomUUID().toString(), "4", "typeD");                createGroup(identityService, UUID.randomUUID().toString(), "5", "typeE");                //调用orderByGroupId和asc方法,效果为按照ID升序排序                System.out.println("asc排序效果:");                List datas = identityService.createGroupQuery().orderByGroupName().asc().list();                for (Group data : datas) {                        System.out.println("    " + data.getId() + "---" + data.getName());                }                System.out.println("desc排序效果");                //调用orderByGroupName和desc方法,效果为名称降序排序                datas = identityService.createGroupQuery().orderByGroupName().desc().list();                for (Group data : datas) {                        System.out.println("    " + data.getId() + "---" + data.getName());                }        }                // 将用户组数据生存到数据库中        static void createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);        }}
复制代码
ID排序问题
在Activiti的设计中,每个数据表的主键均被设置为字符型,这样的设计使得Activiti各个数据表的主键可以被机动设置,但是如果使用数字字符串作为其主键,那么按照ID排序
  1. package org.crazyit.activiti;import java.util.List;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;/** * Query的的排序问题 * @author yangenxiong * */public class SortProblem {        /**         * @param args         */        public static void main(String[] args) {                //创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 写入5条用户组数据                createGroup(identityService, "1", "GroupA", "typeA");                createGroup(identityService, "12", "GroupB", "typeB");                createGroup(identityService, "13", "GroupC", "typeC");                createGroup(identityService, "2", "GroupD", "typeD");                createGroup(identityService, "3", "GroupE", "typeE");                //根据ID升序排序                System.out.println("asc排序效果");                List datas = identityService.createGroupQuery().orderByGroupId().asc().list();                for (Group data : datas) {                        System.out.print(data.getId() + " ");                }        }        // 将用户组数据生存到数据库中        static void createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);        }}
复制代码
多字段排序
在举行数据查询时,如果想对多个字段举行排序,比方按名称降序、ID升序排序,那么在调用asc和desc方法时就需要注意,asc和desc方法会根据Query实例(AbstractQuery)中的orderProperty属性来决定排序的字段,由于orderProperty是AbstractQuery的类属性,因此在第二次调用orderByXXX方法后,会覆盖第一次调用时所设置的值。
  1. package org.crazyit.activiti;import java.util.List;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;/** * Query的多字段排序 * @author yangenxiong * */public class SortMix {        /**         * @param args         */        public static void main(String[] args) {                //创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 写入5条用户组数据                createGroup(identityService, "1", "GroupE", "typeB");                createGroup(identityService, "2", "GroupD", "typeC");                createGroup(identityService, "3", "GroupC", "typeD");                createGroup(identityService, "4", "GroupB", "typeE");                createGroup(identityService, "5", "GroupA", "typeA");                //优先按照id降序、名称升序排序                System.out.println("ID降序排序:");                List datas = identityService.createGroupQuery()                                .orderByGroupId().desc()                                .orderByGroupName().asc().list();                for (Group data : datas) {                        System.out.println("    " + data.getId() + "---" + data.getName() + " ");                }                System.out.println("名称降序排序:");                //下面效果将按名称排序                datas = identityService.createGroupQuery().orderByGroupId()                                .orderByGroupName().desc().list();                for (Group data : datas) {                        System.out.println("    " + data.getId() + "---" + data.getName() + " ");                }        }        // 将用户组数据生存到数据库中        static void createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);        }}
复制代码
singleResult方法
该方法根据查询条件,到数据库中查询唯一的数据记载,如果没有找到符合条件的数据,则返回null,如果找到多于一条的记载,则抛出异常,异常信息为:Query return 2 results instead of max 1。代码清单6-10为一个使用singleResult方法的示例,而且体现三种查询效果
  1. package org.crazyit.activiti;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.RepositoryService;import org.activiti.engine.identity.Group;import org.activiti.engine.repository.Deployment;/** * 使用Query的singleResult方法 * @author yangenxiong * */public class SingleResult {        public static void main(String[] args) {                //创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 写入5条用户组数据                createGroup(identityService, UUID.randomUUID().toString(), "GroupA", "typeA");                createGroup(identityService, UUID.randomUUID().toString(), "GroupB", "typeB");                createGroup(identityService, UUID.randomUUID().toString(), "GroupC", "typeC");                createGroup(identityService, UUID.randomUUID().toString(), "GroupD", "typeD");                createGroup(identityService, UUID.randomUUID().toString(), "GroupE", "typeE");                //再写入一条名称为GroupA的数据                createGroup(identityService, UUID.randomUUID().toString(), "GroupA", "typeF");                //查询名称为GroupB的记载                Group groupB = identityService.createGroupQuery()                                .groupName("GroupB").singleResult();                System.out.println("查询到一条GroupB数据:" + groupB.getId() + "---" + groupB.getName());                //查询名称为GroupF的记载                Group groupF = identityService.createGroupQuery()                                .groupName("GroupF").singleResult();                System.out.println("没有groupF的数据:" + groupF);                //查询名称为GroupA的记载,这里将抛出异常                Group groupA = identityService.createGroupQuery()                                .groupName("GroupA").singleResult();        }        // 将用户组数据生存到数据库中        static void createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);        }}
复制代码
用户组数据查询
在前面几节中,以用户组数据为根本,解说了Activiti的数据查询机制以及一些公用的查询方法。Activiti的每种数据均有对应的查询对象,比方用户组的查询对象为GroupQuery,它继承了AbstractQuery,除了拥有基类的方法(asc、count、desc、list、ListPage及singleResult方法)外,它还拥有自己的查询及排序方法。
➢ groupId(String groupId):根据ID查询与参数值一致的记载。
➢ groupMember(String groupMemberUserId):根据用户ID查询用户所在的用户组,用户组与用户为多对多关系,因此一个用户有大概属于多个用户组。
➢ groupName(String groupName):根据用户组名称查询用户组。
➢ groupNameLike(String groupName):根据用户组名称暗昧查询用户组数据。
➢ groupType(String groupType):根据用户组范例查询用户组数据。
➢ orderByGroupId():设置排序条件为根据ID排序。
➢ orderByGroupName():设置排序条件为根据名称排序。
➢ orderByGroupType():设置排序条件为根据范例排序。
➢ potentialStarter(String procDefId):根据流程界说的ID查询有权限启动该流程界说的用户组。
  1. package org.crazyit.activiti;import java.util.List;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;/** *  * @author yangenxiong * */public class GroupQuery {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 写入5条用户组数据                String aId = UUID.randomUUID().toString();                createGroup(identityService, aId, "GroupA", "typeA");                createGroup(identityService, UUID.randomUUID().toString(), "GroupB", "typeB");                createGroup(identityService, UUID.randomUUID().toString(), "GroupC", "typeC");                createGroup(identityService, UUID.randomUUID().toString(), "GroupD", "typeD");                createGroup(identityService, UUID.randomUUID().toString(), "GroupE", "typeE");                // groupId方法                Group groupA = identityService.createGroupQuery().groupId(aId).singleResult();                System.out.println("groupId method: " + groupA.getId());                // groupName方法                Group groupB = identityService.createGroupQuery().groupName("GroupB").singleResult();                System.out.println("groupName method: " + groupB.getName());                // groupType方法                Group groupC = identityService.createGroupQuery().groupType("typeC").singleResult();                System.out.println("groupType method: " + groupC.getName());                // groupNameLike方法                List groups = identityService.createGroupQuery().groupNameLike("%group%").list();                System.out.println("groupNameLike method: " + groups.size());        }        // 将用户组数据生存到数据库中        static void createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);        }}
复制代码
原生SQL查询
在各个服务组件中,都提供了createNativeXXXQuery方法,该方法返回NativeXXXQuery的实例,这些对象均是NativeQuery的子接口。使用NativeQuery的方法,可以传入原生的SQL举行数据查询,主要使用sql方法传入SQL语句,使用parameter方法设置查询参数。
  1. package org.crazyit.activiti;import java.util.List;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;/** * 使用NativeQuery *  * @author yangenxiong *  */public class NativeQueryTest {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 写入5条用户组数据                createGroup(identityService, UUID.randomUUID().toString(), "GroupA",                                "typeA");                createGroup(identityService, UUID.randomUUID().toString(), "GroupB",                                "typeB");                createGroup(identityService, UUID.randomUUID().toString(), "GroupC",                                "typeC");                createGroup(identityService, UUID.randomUUID().toString(), "GroupD",                                "typeD");                createGroup(identityService, UUID.randomUUID().toString(), "GroupE",                                "typeE");                // 使用原生SQL查询全部数据                List groups = identityService.createNativeGroupQuery()                                .sql("select * from ACT_ID_GROUP").list();                System.out.println("查询全部数据:" + groups.size());                // 使用原生SQL按条件查询,并设入参数,只查到一条数据                groups = identityService.createNativeGroupQuery()                                .sql("select * from ACT_ID_GROUP where NAME_ = 'GroupC'")                                .list();                System.out.println("按条件查询:" + groups.get(0).getName());                // 使用parameter方法设置查询参数                groups = identityService.createNativeGroupQuery()                                .sql("select * from ACT_ID_GROUP where NAME_ = #{name}")                                .parameter("name", "GroupD").list();                System.out.println("使用parameter方法按条件查询:" + groups.get(0).getName());        }        // 将用户组数据生存到数据库中        static void createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);        }}
复制代码
用户管理
作为流程根本元素之一,Activiti同样为用户数据提供了一套管理的API,用户数据生存在ACT_ID_USER表中,除了该表外,Activiti还提供了ACT_ID_INFO表用于生存用户信息数据
User对象
与Group对象一样,User对象同样为一个接口,其有一个子接口UserEntity,实现类为UserEntityImpl。UserEntityImpl包罗以下映射属性。
➢ id:用户ID,对应ACT_ID_USER表的ID_列。
➢ firstName:用户的姓,对应ACT_ID_USER表的FIRST_列。
➢ lastName:用户的名,对应ACT_ID_USER表的LAST_列。
➢ email:用户邮箱,对应ACT_ID_USER表的EMAIL_列。
➢ password:用户暗码,对应ACT_ID_USER表的PWD_列。
➢ pictureByteArrayId:用户图片的数据记载ID,对应ACT_ID_USER表的PICTURE_ID_列,该列生存ACT_GE_BYTEARRAY表数据的ID。
➢ revision:该用户数据的版本,对应ACT_ID_USER表的REV_列。
在API文档中,只能看到User接口的方法,revision字段并不让外部使用与获取。
添加用户
添加用户与创建用户组雷同,Activiti也提供了一个创建User实例的方法(newUser),还提供了一个生存用户数据的方法(saveUser),雷同于用户组的newGroup与saveGroup方法。
添加用户
  1. package org.crazyit.activiti;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.User;/** * 添加用户 * @author yangenxiong * */public class AddUser {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                String id = UUID.randomUUID().toString();                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName("Angus");                user.setLastName("Young");                user.setEmail("yangenxiong@163.com");                user.setPassword("abc");                // 使用saveUser方法生存用户                identityService.saveUser(user);                // 根据 id 查询                user = identityService.createUserQuery().userId(id).singleResult();                System.out.println(user.getEmail());        }}
复制代码
修改用户
  1. package org.crazyit.activiti;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.User;/** * 修改用户 * @author yangenxiong * */public class UpdateUser {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                                String id = UUID.randomUUID().toString();                // 创建用户                creatUser(identityService, id, "angus", "young", "yangenxiong@163.com", "abc");                // 查询用户                User user = identityService.createUserQuery().userId(id).singleResult();                user.setEmail("abc@163.com");                // 执行生存                identityService.saveUser(user);        }                //创建用户方法        static void creatUser(IdentityService identityService, String id, String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);        }}
复制代码
删除用户
  1. package org.crazyit.activiti;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.User;/** * 删除用户 * @author yangenxiong * */public class DeleteUser {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                String id = UUID.randomUUID().toString();                // 创建用户                creatUser(identityService, id, "angus", "young", "yangenxiong@163.com", "abc");                System.out.println("删除前数量:" + identityService.createUserQuery().userId(id).count());                // 删除用户                identityService.deleteUser(id);                System.out.println("删除后数量:" + identityService.createUserQuery().userId(id).count());        }                //创建用户方法        static void creatUser(IdentityService identityService, String id, String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);        }}
复制代码
验证用户暗码
IdentityService中提供了一个checkPassword方法来验证用户的暗码。在用户模块,需要分清用户与账号的概念。对于Activiti来说,用户是一类数据,而账号则是附属于某个用户的数据。此地方说的验证暗码,是指验证用户的暗码(ACT_ID_USER表的PWD_字段),而不是用户账号的暗码。
  1. package org.crazyit.activiti;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.User;/** * 验证用户暗码 * @author yangenxiong * */public class CheckPasswd {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                String id = UUID.randomUUID().toString();                // 创建用户                creatUser(identityService, id, "angus", "young", "yangenxiong@163.com", "abc");                // 验证用户暗码                System.out.println("验证暗码效果:" + identityService.checkPassword(id, "abc"));                System.out.println("验证暗码效果:" + identityService.checkPassword(id, "c"));        }                //创建用户方法        static void creatUser(IdentityService identityService, String id, String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);        }}
复制代码
用户数据查询
与用户组雷同,用户同样有一个UserQuery查询对象,而且该对象也提供了相应的查询与排序方法,我们也可以调用list大概singleResult方法返回查询数据。UserQuery中包罗了如下这些方法。
➢ userEamil(String email):根据Email值查询用户数据。
➢ usreEmailLike(String emailLike):根据Email值暗昧查询用户数据。
➢ userFirstName(String firstName):根据用户的姓查询用户数据。
➢ userFirstNameLike(String firstNameLike):根据用户的姓暗昧查询用户数据。
➢ userId(String id):根据用户ID查询用户数据。
➢ userLastName(String lastName):根据用户的名查询用户数据。
➢ userLastNameLike(String lastNameLike):根据用户的名暗昧查询用户数据。
➢ memberOfGroup(String groupId):根据用户组ID查询属于该组的全部用户数据。
➢ orderByUserEmail():设置根据Email举行排序。
➢ orderByUserFirstName():设置根据用户的姓举行排序。
➢ orderByUserId():设置根据ID举行排序。
➢ orderByUserLastName():设置根据用户的名举行排序。
➢ potentialStarter(String procDefId):根据流程界说的ID查询有权限启动流程界说的用户。
  1. package org.crazyit.activiti;import java.util.List;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.User;/** * 查询用户数据 *  * @author yangenxiong * */public class UserQuery {        /**         * @param args         */        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                String id1 = UUID.randomUUID().toString();                String id2 = UUID.randomUUID().toString();                // 创建两个用户                creatUser(identityService, id1, "angus", "young",                                "yangenxiong@163.com", "abc");                creatUser(identityService, id2, "angus2", "young2", "abc@163.com",                                "123");                // 调用UserQuery的各个查询方法                // userId                User user = identityService.createUserQuery().userId(id1)                                .singleResult();                System.out.println("userId:" + user.getFirstName());                // userFirstName                user = identityService.createUserQuery().userFirstName("angus")                                .singleResult();                System.out.println("userFirstName:" + user.getFirstName());                // userFirstNameLike                List datas = identityService.createUserQuery()                                .userFirstNameLike("angus%").list();                System.out.println("createUserQuery:" + datas.size());                // userLastName                user = identityService.createUserQuery().userLastName("young")                                .singleResult();                System.out.println("userLastName:" + user.getFirstName());                // userLastNameLike                datas = identityService.createUserQuery().userLastNameLike("young%")                                .list();                System.out.println("userLastNameLike:" + datas.size());                // userEmail                user = identityService.createUserQuery().userEmail("abc@163.com")                                .singleResult();                System.out.println("userEmail:" + user.getFirstName());                // userEmailLike                datas = identityService.createUserQuery().userEmailLike("%163.com")                                .list();                System.out.println("userEmailLike:" + datas.size());                // 使用NativeQuery                datas = identityService.createNativeUserQuery()                                .sql("select * from ACT_ID_USER where EMAIL_ = #{email}")                                .parameter("email", "yangenxiong@163.com").list();                System.out.println("native query:" + datas.get(0).getEmail());        }        // 创建用户方法        static void creatUser(IdentityService identityService, String id,                        String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);        }}
复制代码
设置认证用户
IdentityService中提供了一个setAuthenticatedUserId方法来将用户ID设置到当前的线程中,setAuthenticatedUserId方法最终调用的是ThreadLocal的set方法。这意味着,如果启动两条线程,在线程中分别调用setAuthenticatedUserId方法,则在相应线程中会输出差别的效果
  1. package org.crazyit.activiti;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.User;import org.activiti.engine.impl.identity.Authentication;public class AuthenticatedUserId {        /**         * @param args         */        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                final IdentityService identityService = engine.getIdentityService();                // 设置当前线程的userId为1                identityService.setAuthenticatedUserId("3");                System.out.println("当前线程usreId:" + Authentication.getAuthenticatedUserId());                // 启动两条线程                new Thread() {                        public void run() {                                try {                                        identityService.setAuthenticatedUserId("1");                                        Thread.sleep(5000);                                        System.out.println("线程1的userId:" + Authentication.getAuthenticatedUserId());                                } catch (Exception e) {                                                                        }                        }                }.start();                                new Thread() {                        public void run() {                                identityService.setAuthenticatedUserId("2");                                System.out.println("线程2的usrId:" + Authentication.getAuthenticatedUserId());                        }                }.start();        }        //创建用户方法        static void creatUser(IdentityService identityService, String id, String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);        }}
复制代码
用户信息管理
在Activiti中,用户与账号为差别的概念,用户数据已经在上一节报告过了,Activiti将一些用户相关的信息抽象出来,使用单独的一个数据表来生存。这些用户相关的信息包罗账号信息和自界说的用户信息,这些信息均生存在ACT_ID_INFO表中。除了这些用户信息外,尚有用户的图片资源,图片被生存在Activiti公共的资源表ACT_GE_BYTEARRAY中
添加和删除用户信息
就像用户组与用户的数据一样,同样有一个实体与用户信息映射,对应的实体类为IdentityInfoEntityImpl,但是与用户和用户组不一样的是,Activiti并没有为其提供相应的Query对象,因为这个表的数据布局是key-value形式,只需要知道key就可以查询到相应的数据。以下为添加和删除用户方法的形貌。
➢ setUserInfo(String userId,String key,String value):为用户添加用户信息,第一个参数为用户数据的ID,第二个参数为用户信息的名称,第三个参数为该用户信息的值。
➢ deleteUserInfo(String userId,String key):删除用户信息,第一个参数为用户ID,第二个参数为用户信息的名称。
  1. package org.crazyit.activiti;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.User;/** * 添加删除用户信息 * @author yangenxiong * */public class AddDeleteUserInfo {        /**         * @param args         */        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                String id = UUID.randomUUID().toString();                // 创建用户                creatUser(identityService, id, "angus", "young", "yangenxiong@163.com", "abc");                // 创建一个用户信息                identityService.setUserInfo(id, "age", "30");                // 创建第二个用户信息                identityService.setUserInfo(id, "weight", "60KG");                // 删除用户年龄信息                identityService.deleteUserInfo(id, "age");        }        //创建用户方法        static void creatUser(IdentityService identityService, String id, String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);        }}
复制代码
查询用户信息
乐成将用户信息生存到数据库后,如果需要使用这些信息,则可以调用IdentityService的getUserInfo方法来查找这些信息,使用该方法需要提供用户的ID与信息的键值。调用该方法后,将返回相应信息的字符串。
  1. package org.crazyit.activiti;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.User;/** * 查询用户信息 * @author yangenxiong * */public class GetUserInfo {        /**         * @param args         */        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                String id = UUID.randomUUID().toString();                // 创建用户                creatUser(identityService, id, "angus", "young", "yangenxiong@163.com", "abc");                // 创建一个用户信息                identityService.setUserInfo(id, "age", "30");                // 创建第二个用户信息                identityService.setUserInfo(id, "weight", "60KG");                // 查询用户信息                String value = identityService.getUserInfo(id, "age");                System.out.println("用户年龄为:" + value);        }        //创建用户方法        static void creatUser(IdentityService identityService, String id, String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);        }}
复制代码
设置用户图片
Activiti专门提供了一个数据表来生存文件数据,即ACT_GE_BYTEARRAY表。Activiti会读取文件,并将这些文件转换为byte数组,然后生存到表中。IdentityService提供了setUserPicture和getUserPicture方法用来设置和查找用户图片数据,此中对setUserPicture方法需要设置两个参数:用户ID和Picture实例。
  1. package org.crazyit.activiti;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.util.UUID;import javax.imageio.ImageIO;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Picture;import org.activiti.engine.identity.User;/** * 设置用户图片 * @author yangenxiong * */public class UserPicture {        public static void main(String[] args) throws Exception {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                String id = UUID.randomUUID().toString();                // 创建用户                creatUser(identityService, id, "angus", "young", "yangenxiong@163.com", "abc");                // 读取图片并转换为byte数组                FileInputStream fis = new FileInputStream(new File("resource/artifact/picture.png"));                                BufferedImage img = ImageIO.read(fis);                ByteArrayOutputStream output = new ByteArrayOutputStream();                ImageIO.write(img, "png", output);                //获取图片的byte数组                byte[] picArray = output.toByteArray();                                // 创建Picture实例                Picture picture = new Picture(picArray, "angus image");                // 为用户设置图片                identityService.setUserPicture(id, picture);                        }        //创建用户方法        static void creatUser(IdentityService identityService, String id, String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);        }}
复制代码
用户组与用户的关系
在Activiti中,一个用户可以被分配到多个用户组中,一个用户组中可以包罗多个用户,针对这种情况,Activiti使用了中间表来生存这两种数据间的关系。通过关系表的数据,可以清楚地看到用户组与用户之间的关系,Activiti也提供了相应的API来使用这种关系。这个中间表为ACT_ID_MEMBERSHIP表,这里需要注意的是,Activiti并没有为这个表做实体的映射。
绑定关系
绑定关系,意味着向ACT_ID_MEMBERSHIP表写入一条关系数据,只需要指定这个关系的用户ID和用户组ID,再调用IdentityService的createMembership方法即可,该方法第一个参数为用户ID,第二个参数为用户组ID。
  1. package org.crazyit.activiti;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;import org.activiti.engine.identity.User;/** * 绑定用户组与用户的关系 *  * @author yangenxiong * */public class CreateMemberShip {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 生存一个用户                User user = creatUser(identityService, UUID.randomUUID().toString(),                                "angus", "young", "yangenxiong@163.com", "abc");                // 生存一个用户组                Group group = createGroup(identityService,                                UUID.randomUUID().toString(), "司理组", "manager");                // 绑定关系                identityService.createMembership(user.getId(), group.getId());        }        // 创建用户方法        static User creatUser(IdentityService identityService, String id,                        String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);                return identityService.createUserQuery().userId(id).singleResult();        }        // 将用户组数据生存到数据库中        static Group createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);                return identityService.createGroupQuery().groupId(id).singleResult();        }}
复制代码
清除绑定
  1. package org.crazyit.activiti;import java.util.List;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;import org.activiti.engine.identity.User;/** * 根据用户组ID查询用户组下的用户 * @author yangenxiong * */public class DeleteMemberShip {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 生存两个用户                User user = creatUser(identityService, "1", "angus", "young", "yangenxiong@163.com", "abc");                // 生存一个用户组                Group group = createGroup(identityService, "2", "Group A", "manager");                // 将两个用户分配到用户组下                identityService.createMembership(user.getId(), group.getId());                // 删除绑定关系                identityService.deleteMembership(user.getId(), group.getId());        }        //创建用户方法        static User creatUser(IdentityService identityService, String id, String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);                return identityService.createUserQuery().userId(id).singleResult();        }                // 将用户组数据生存到数据库中        static Group createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);                return identityService.createGroupQuery().groupId(id).singleResult();        }}
复制代码
查询用户组下的用户
根据中间表的设计,大抵可以猜到memberOfGroup方法的实现过程,先到ACT_ID_MEMBERSHIP表中根据groupId举行查询,获取全部的userId后,再到ACT_ID_USER表中查询用户数据
  1. package org.crazyit.activiti;import java.util.List;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;import org.activiti.engine.identity.User;/** * 绑定用户组与用户的关系 *  * @author yangenxiong * */public class QueryUsersByGroup {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 生存两个用户                User user1 = creatUser(identityService, UUID.randomUUID().toString(),                                "张司理", "young", "yangenxiong@163.com", "abc");                User user2 = creatUser(identityService, UUID.randomUUID().toString(),                                "李司理", "young2", "yangenxiong@163.com", "abc");                // 生存一个用户组                Group group = createGroup(identityService,                                UUID.randomUUID().toString(), "司理组", "manager");                // 将两个用户分配到用户组下                identityService.createMembership(user1.getId(), group.getId());                identityService.createMembership(user2.getId(), group.getId());                List users = identityService.createUserQuery()                                .memberOfGroup(group.getId()).list();                System.out.println("司理组有如下人员:");                for (User user : users) {                        System.out.println(user.getFirstName());                }        }        // 创建用户方法        static User creatUser(IdentityService identityService, String id,                        String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);                return identityService.createUserQuery().userId(id).singleResult();        }        // 将用户组数据生存到数据库中        static Group createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);                return identityService.createGroupQuery().groupId(id).singleResult();        }}
复制代码
查询用户所属的用户组
与memberOfGroup方法雷同,groupMember方法会根据用户的ID,查询该用户所属的用户组。同样,该方法会到中间表中查询该用户的全部关系数据而且得到groupId,然后根据这些groupId再到用户组的表中查询用户组数据。
  1. package org.crazyit.activiti;import java.util.List;import java.util.UUID;import org.activiti.engine.IdentityService;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.activiti.engine.ProcessEngines;import org.activiti.engine.identity.Group;import org.activiti.engine.identity.User;/** * 绑定用户组与用户的关系 *  * @author yangenxiong * */public class QueryGroupsByUser {        public static void main(String[] args) {                // 创建流程引擎                ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();                // 得到身份服务组件实例                IdentityService identityService = engine.getIdentityService();                // 创建一个用户                User user = creatUser(identityService, UUID.randomUUID().toString(),                                "张三", "young", "yangenxiong@163.com", "abc");                // 创建两个用户组                Group group1 = createGroup(identityService, UUID.randomUUID()                                .toString(), "司理组", "manager");                Group group2 = createGroup(identityService, UUID.randomUUID()                                .toString(), "员工组", "manager");                // 将用户与两个用户组绑定关系                identityService.createMembership(user.getId(), group1.getId());                identityService.createMembership(user.getId(), group2.getId());                // 调用memberOfGroup方法查询用户所在的用户组                List groups = identityService.createGroupQuery()                                .groupMember(user.getId()).list();                System.out.println("张三属于的用户组有:");                for (Group group : groups) {                        System.out.println(group.getName());                }        }        // 创建用户方法        static User creatUser(IdentityService identityService, String id,                        String first, String last, String email, String passwd) {                // 使用newUser方法创建User实例                User user = identityService.newUser(id);                // 设置用户的各个属性                user.setFirstName(first);                user.setLastName(last);                user.setEmail(email);                user.setPassword(passwd);                // 使用saveUser方法生存用户                identityService.saveUser(user);                return identityService.createUserQuery().userId(id).singleResult();        }        // 将用户组数据生存到数据库中        static Group createGroup(IdentityService identityService, String id,                        String name, String type) {                // 调用newGroup方法创建Group实例                Group group = identityService.newGroup(id);                group.setName(name);                group.setType(type);                identityService.saveGroup(group);                return identityService.createGroupQuery().groupId(id).singleResult();        }}
复制代码
来源:https://blog.csdn.net/weixin_43912996/article/details/112022396
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )