activiti学习笔记3-用户与用户组
(本博客都是纯文本手工代码,错误难免,需要在eclipse中自己调整错误代码)
一、表结构
acitiviti建立了默认用户表:
1,从表的名字可以一目了然的看到,activiti其实提供了一个简单的用户表结构,用户组与用户之间通过映射表进行关联,用户信息是一个单独的表;
2,如果要扩展成权限表,只需要增加一个权限表,然后和用户表进行映射,或者和用户组进行映射,即可成为一个简单的权限管理结构表;
3,用户体系表和activiti的其他表没有外键关联,说明acitivi允许你使用自己创建的用户体系表,这样可以和spring security或者shiro容易的结合在一起;
二、activiti操作用户组与用户表
1,创建用户组:
1
2
3
4
5
6
7
8
9
10
11
|
//newGroup方法创建Group实例 Group group = identityService.newGroup( "1" ); group.setName( "经理组" ); group.setType( "manager" ); // 自定义方法保存用户组 public void createGroup(IdentityService identityService, String id,String name, String type) { Group group = identityService.newGroup(id); group.setName(name); group.setType(type); identityService.saveGroup(group);} createGroup(identityService, "1" , "经理组" , "typeManager" ); |
2,保存、删除用户组
1
2
|
identityService.saveGroup(group); identityService.deleteGroup( "1" ); |
3,查询用户组
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//调用listPage方法,从索引为2的记录开始,查询3条记录 List<Group> datas = identityService.createGroupQuery().list(); for (Group data : datas) { System.out.println(data.getId() + "---" + data.getName() + " " );} //其他类似查询方法 identityService.createGroupQuery().listPage(); //分页返回查询结果 identityService.createGroupQuery().count(); //结果总数 identityService.createGroupQuery().groupName( "managerA" ).singleResult(); //查询到多个时会抛出异常 identityService.createGroupQuery().groupNameLike( "%managerA%" ).singleResult(); // identityService.createGroupQuery().groupId( "1" ).singleResult(); // identityService.createGroupQuery().groupType( "typeA" ).singleResult(); // identityService.createGroupQuery().orderByGroupId().asc().list(); //结果升序 identityService.createGroupQuery().orderByGroupName().desc().list(); //结果降序 |
4,添加,保存,删除用户
1
2
3
|
User user = identityService.newUser( "新用户ID" ); identityService.saveUser(user); identityService.deleteUser(id); |
5,验证用户密码
1
|
identityService。checkPassword( "用户的ID" , "用户密码" ); |
6,用户数据查询
1
2
|
//与group查询类似 List<User> datas = identityService.createGroupUser().list(); |
7,设置认证用户
1
|
identityService.setAuthenticatedUserId( "用户ID" ); |
认证用户的作用是设置流程发起人:
在流程开始之前设置,会自动在表ACT_HI_PROCINST 中的START_USER_ID_中设置用户ID:
1
2
3
4
5
6
7
|
//流程发起前设置发起人,记录在流程历史中 identityService.setAuthenticatedUserId( "kitty" ); //开始流程 runtimeService.startProcessInstanceByKey( "XML中的ID" ); //查询流程发起人 logger.info(historyService.createHistoricProcessInstanceQuery() .startedBy( "ketty" ).singleResult().getProcessDefinitionId()); |
applyUserId
扩展:设置BPMN开始节点initiator初始化参数applyUserId:
1
2
|
//XML图中设置其实节点初始化参数,其实就是节点人 < startevent id = "startevent1" name = "Start" activiti:initiator = "applyUserId" ></ startevent > |
接受参数applyUserId,流程返回发起人(<userTask>中):
1
|
activiti:assignee="${applyUserId}" |
8,设置用户信息INFO表
1
2
3
4
|
//设置用户info信息,设置后type字段变成userinfo identityService.setUserInfo( "INFO表USER_ID" , "INFO表KEY" , "INFO表VALUE" ); //设置账号信息,设置后TYPE字段变成account,一个用户可以用多个账号 identityService.setUserAccount( "INFO表USER_ID" , "INFO表KEY" , "INFO表VALUE" ); |
9,查询用户信息INFO表
1
2
|
identityService.getUserInfo( "INFO表USER_ID" , "INFO表KEY" ); identityService.getUserAccount( "INFO表USER_ID" , "INFO表KEY" ); //不推荐使用 |
二、用户与用户组关系
1,设置用户与用户组关系
1
2
|
identityService.createMembership( "用户ID" , "组ID" ); //绑定 identityService.deleteMembership( "用户ID" , "组ID" ); //删除 |
2,查询用户与用户组关系
1
2
|
List<Group> datas = identityService.createGroupQuery().groupMember(user.getId()).list(); List<User> datas = identityService.createUserQuery().MemberOfGroup(group.getId()).list(); |
三、创建用户与用户组通用方法
1,用户:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//创建用户方法 public void creatUser(IdentityService identityService, String id, String first, String email, String passwd) { // 使用newUser方法创建User实例 User user = identityService.newUser(id); // 设置用户的各个属性 user.setFirstName(first); user.setLastName( "none" ); user.setEmail(email); user.setPassword(passwd); // 使用saveUser方法保存用户 identityService.saveUser(user);} //具体创建 IdentityService identityService = engine.getIdentityService(); creatUser(identityService, "user1" , "德玛西亚" , "abc@163.com" , "123" ); |
2,组:
1
2
3
4
5
6
7
8
9
10
11
|
// 将用户组数据保存到数据库中 public 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); } // 写入用户组数据 IdentityService identityService = engine.getIdentityService(); createGroup(identityService, "group1" , "Group A" , "type A" );
|