activiti学习笔记3-用户与用户组

  • Post author:
  • Post category:其他


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


);