(本博客都是纯文本手工代码,错误难免,需要在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"
);
|