/**
* 角色分配权限
*
* @param permissionReq
*/
public void addPermissions(PermissionReq permissionReq) {
List<PermissionReq.Resource> resources = permissionReq.getResources();
if (resources == null || resources.isEmpty()) {
BusinessException.thrown("请给角色分配资源!");
}
//查询已经分配过的资源
List<RolePermission> oldResources = rolePermissionDao.queryPermissions(permissionReq.getRoleId());
//上次分配的资源的id集合
List<Integer> oldResourceIds = oldResources.stream().map(RolePermission::getRpPermissionId).collect(Collectors.toList());
//新资源id集合
List<Integer> newResourceIds = resources.stream().map(PermissionReq.Resource::getResourceId).collect(Collectors.toList());
//失效资源 新1237 老123456 筛出来456 456做删除
List<Integer> invalidResources = oldResourceIds.stream().filter(oldId -> !newResourceIds.contains(oldId)).collect(Collectors.toList());
//过滤出新增资源 老123456 新1237 筛出7 7做新增
List<PermissionReq.Resource> addResources = resources.stream().filter(
resource -> !oldResourceIds.contains(resource.getResourceId()))
.collect(Collectors.toList());
//123456 1237 筛出老的123 123做修改
List<PermissionReq.Resource> updateResources = resources.stream().filter(
resource -> oldResourceIds.contains(resource.getResourceId()))
.collect(Collectors.toList());
// List<RolePermission> saveList = Lists.newArrayListWithExpectedSize(addResources.size());
// addResources.forEach(resource -> {
// RolePermission rolePermission = new RolePermission();
// rolePermission.setRpId(resource.getResourceId());
// rolePermission.setLevel(resource.getLevel());
// rolePermission.setRpPermissionId(resource.getResourceId());
// rolePermission.setRpRoleId(permissionReq.getRoleId());
// rolePermission.setRootNodeId(resource.getRootNodeId());
// saveList.add(rolePermission);
// });
//202012191336
transactionManager.doInTransaction(() -> {
addResources.forEach(resource -> {
RolePermission rolePermission = new RolePermission();
rolePermission.setRpId(resource.getResourceId());
rolePermission.setLevel(resource.getLevel());
rolePermission.setRpPermissionId(resource.getResourceId());
rolePermission.setRpRoleId(permissionReq.getRoleId());
rolePermission.setRootNodeId(resource.getRootNodeId());
//查询节点归属
SysResource sysResource = this.selectParent(rolePermission.getRpId());
rolePermission.setRootNodeId(sysResource.getParentId());
rolePermissionDao.insert(rolePermission);
});
updateResources.forEach(updateResource -> {
//查询节点归属
SysResource sysResource = this.selectParent(updateResource.getResourceId());
rolePermissionDao.update(null, Wrappers.<RolePermission>lambdaUpdate()
.eq(RolePermission::getRpRoleId, permissionReq.getRoleId())
.eq(RolePermission::getRpPermissionId, updateResource.getResourceId())
// .set(RolePermission::getLevel,updateResource.getLevel() )
.set(RolePermission::getRootNodeId, sysResource.getParentId()));
});
invalidResources.forEach(invalidId -> rolePermissionDao.update(null,
Wrappers.<RolePermission>lambdaUpdate()
.eq(RolePermission::getRpRoleId, permissionReq.getRoleId())
.eq(RolePermission::getRpPermissionId, invalidId)
.set(RolePermission::getFlagDel, Constants.DEL_FLAG_ON)));
return null;
});
}
JDK8链式语法样例
最新推荐文章于 2022-11-15 18:28:09 发布