activiti中根据用户id获取用户角色
时间: 2024-05-08 17:21:37 浏览: 90
根据进程ID获取进程的用户名
4星 · 用户满意度95%
在Activiti中,可以通过以下步骤根据用户ID获取用户的角色:
1. 获取用户对应的用户组ID或用户角色ID。
可以使用以下方法获取用户所在的用户组ID或用户角色ID:
```
List<Group> groups = identityService.createGroupQuery().groupMember(userId).list();
List<String> groupIds = groups.stream().map(Group::getId).collect(Collectors.toList());
List<String> roleIds = identityService.createNativeUserQuery()
.sql("SELECT DISTINCT RES.ID_ FROM ACT_ID_GROUP RES, ACT_ID_MEMBERSHIP MEM, ACT_ID_USER USER WHERE RES.TYPE_='assignment' AND MEM.USER_ID_ = #{userId} AND MEM.GROUP_ID_ = RES.ID_")
.parameter("userId", userId)
.list();
```
2. 获取用户组对应的角色ID。
可以使用以下方法获取用户组所对应的角色ID:
```
List<String> roleIds = identityService.createNativeGroupQuery()
.sql("SELECT DISTINCT RES.ID_ FROM ACT_ID_GROUP RES, ACT_ID_MEMBERSHIP MEM WHERE RES.TYPE_='assignment' AND MEM.USER_ID_ = #{userId} AND MEM.GROUP_ID_ = RES.ID_")
.parameter("userId", userId)
.list();
```
3. 获取用户直接拥有的角色ID。
可以使用以下方法获取用户直接拥有的角色ID:
```
List<String> roleIds = identityService.createNativeUserQuery()
.sql("SELECT DISTINCT RES.ID_ FROM ACT_ID_GROUP RES, ACT_ID_MEMBERSHIP MEM, ACT_ID_USER USER WHERE RES.TYPE_='assignment' AND MEM.USER_ID_ = #{userId} AND MEM.GROUP_ID_ = RES.ID_")
.parameter("userId", userId)
.list();
```
4. 获取角色对应的权限。
可以使用以下方法获取角色所对应的权限:
```
List<Permission> permissions = permissionService.createPermissionQuery()
.permissionRole(roleId)
.list();
```
其中,`permissionService`是`ProcessEngine`实例中的`PermissionService`对象,可以通过`processEngine.getPermissionService()`获取。
综上所述,可以根据用户ID获取用户角色的方法如下:
```
public List<Permission> getUserPermissions(String userId) {
List<Group> groups = identityService.createGroupQuery().groupMember(userId).list();
List<String> groupIds = groups.stream().map(Group::getId).collect(Collectors.toList());
List<String> roleIds = identityService.createNativeGroupQuery()
.sql("SELECT DISTINCT RES.ID_ FROM ACT_ID_GROUP RES, ACT_ID_MEMBERSHIP MEM WHERE RES.TYPE_='assignment' AND MEM.USER_ID_ = #{userId} AND MEM.GROUP_ID_ = RES.ID_")
.parameter("userId", userId)
.list();
List<String> directRoleIds = identityService.createNativeUserQuery()
.sql("SELECT DISTINCT RES.ID_ FROM ACT_ID_GROUP RES, ACT_ID_MEMBERSHIP MEM, ACT_ID_USER USER WHERE RES.TYPE_='assignment' AND MEM.USER_ID_ = #{userId} AND MEM.GROUP_ID_ = RES.ID_")
.parameter("userId", userId)
.list();
List<String> allRoleIds = new ArrayList<>();
allRoleIds.addAll(groupIds);
allRoleIds.addAll(roleIds);
allRoleIds.addAll(directRoleIds);
List<Permission> permissions = new ArrayList<>();
for (String roleId : allRoleIds) {
permissions.addAll(permissionService.createPermissionQuery()
.permissionRole(roleId)
.list());
}
return permissions;
}
```
阅读全文