【8.1.0】【role】更新角色绑定

pull/60/head
fengshuonan 2024-01-17 00:53:49 +08:00
parent 5dad2154a9
commit 7b346938a4
4 changed files with 80 additions and 14 deletions

View File

@ -72,4 +72,12 @@ public interface SysRoleServiceApi {
*/
List<SysRoleDTO> getRolesByIds(List<Long> roleIds);
/**
*
*
* @author fengshuonan
* @since 2024/1/17 0:40
*/
List<SysRoleDTO> getSystemRoleAndCurrentCompanyRole(Long companyId);
}

View File

@ -54,4 +54,10 @@ public class SysRoleDTO {
@ChineseDescription("编码")
private String roleCode;
/**
* 10-20-
*/
@ChineseDescription("角色类型10-系统角色20-公司角色")
private Integer roleType;
}

View File

@ -11,6 +11,8 @@ import cn.stylefeng.roses.kernel.sys.api.SysRoleServiceApi;
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveRoleCallbackApi;
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveUserCallbackApi;
import cn.stylefeng.roses.kernel.sys.api.constants.SysConstants;
import cn.stylefeng.roses.kernel.sys.api.enums.role.RoleTypeEnum;
import cn.stylefeng.roses.kernel.sys.api.pojo.role.SysRoleDTO;
import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUserRole;
import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum;
import cn.stylefeng.roses.kernel.sys.modular.user.mapper.SysUserRoleMapper;
@ -24,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@ -63,8 +66,7 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
}
// 清空已有的用户角色绑定
LambdaQueryWrapper<SysUserRole> wrapper = this.createWrapper(sysUserRoleRequest);
this.remove(wrapper);
this.removeRoleAlreadyBind(sysUserRoleRequest);
// 重新绑定用户角色信息
Set<Long> roleIdList = sysUserRoleRequest.getRoleIdList();
@ -157,9 +159,8 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
@Override
public List<Long> findUserIdsByRoleId(Long roleId) {
SysUserRoleRequest userRoleRequest = new SysUserRoleRequest();
userRoleRequest.setRoleId(roleId);
LambdaQueryWrapper<SysUserRole> queryWrapper = this.createWrapper(userRoleRequest);
LambdaQueryWrapper<SysUserRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUserRole::getRoleId, roleId);
queryWrapper.select(SysUserRole::getUserId);
List<SysUserRole> list = this.list(queryWrapper);
return list.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
@ -184,21 +185,56 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
}
/**
* wrapper
*
*
* @author fengshuonan
* @date 2023/06/10 21:26
* @since 2024/1/17 0:24
*/
private LambdaQueryWrapper<SysUserRole> createWrapper(SysUserRoleRequest sysUserRoleRequest) {
private void removeRoleAlreadyBind(SysUserRoleRequest sysUserRoleRequest) {
// 1. 获取系统中的所有角色,包括系统角色和当前公司角色
List<SysRoleDTO> roleResults = sysRoleServiceApi.getSystemRoleAndCurrentCompanyRole(
LoginContext.me().getCurrentUserCompanyId());
if (ObjectUtil.isEmpty(roleResults)) {
return;
}
// 2. 所有系统角色id集合
Set<Long> systemRoleIdList = roleResults.stream().filter(i -> i.getRoleType().equals(RoleTypeEnum.SYSTEM_ROLE.getCode()))
.map(SysRoleDTO::getRoleId)
.collect(Collectors.toSet());
// 3. 所有当前公司角色id集合
Set<Long> currentCompanyRoleIdList = roleResults.stream()
.filter(i -> i.getRoleType().equals(RoleTypeEnum.COMPANY_ROLE.getCode()))
.map(SysRoleDTO::getRoleId)
.collect(Collectors.toSet());
LambdaQueryWrapper<SysUserRole> queryWrapper = new LambdaQueryWrapper<>();
Long userId = sysUserRoleRequest.getUserId();
queryWrapper.eq(ObjectUtil.isNotNull(userId), SysUserRole::getUserId, userId);
// 2. 当前如果是超级管理员在操作,清空用户的系统角色和当前公司角色(因为超级管理员的绑定角色列表,可以看到系统角色和当前公司角色)
boolean superAdminFlag = LoginContext.me().getSuperAdminFlag();
if (superAdminFlag) {
Long roleId = sysUserRoleRequest.getRoleId();
queryWrapper.eq(ObjectUtil.isNotNull(roleId), SysUserRole::getRoleId, roleId);
Set<Long> paramsRoleIdList = new HashSet<>(systemRoleIdList);
if (ObjectUtil.isNotEmpty(currentCompanyRoleIdList)) {
paramsRoleIdList.addAll(currentCompanyRoleIdList);
}
return queryWrapper;
queryWrapper.eq(SysUserRole::getUserId, sysUserRoleRequest.getUserId());
queryWrapper.in(SysUserRole::getRoleId, paramsRoleIdList);
this.remove(queryWrapper);
}
// 3. 如果当前不是超级管理员则只能清空当前公司的角色id集合
else {
if (ObjectUtil.isEmpty(currentCompanyRoleIdList)) {
return;
}
queryWrapper.eq(SysUserRole::getUserId, sysUserRoleRequest.getUserId());
queryWrapper.in(SysUserRole::getRoleId, currentCompanyRoleIdList);
this.remove(queryWrapper);
}
}
}

View File

@ -163,7 +163,8 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
LambdaQueryWrapper<SysRole> wrapper = createWrapper(sysRoleRequest);
// 只查询需要的字段
wrapper.select(SysRole::getRoleName, SysRole::getRoleCode, SysRole::getRoleSort, SysRole::getRoleId, BaseEntity::getCreateTime, SysRole::getRoleType, SysRole::getRoleCompanyId);
wrapper.select(SysRole::getRoleName, SysRole::getRoleCode, SysRole::getRoleSort, SysRole::getRoleId, BaseEntity::getCreateTime,
SysRole::getRoleType, SysRole::getRoleCompanyId);
// 非管理员用户只能查看自己创建的角色
this.filterRolePermission(wrapper, sysRoleRequest);
@ -335,6 +336,21 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
return BeanUtil.copyToList(sysRoleList, SysRoleDTO.class, CopyOptions.create().ignoreError());
}
@Override
public List<SysRoleDTO> getSystemRoleAndCurrentCompanyRole(Long companyId) {
LambdaQueryWrapper<SysRole> sysRoleLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysRoleLambdaQueryWrapper.eq(SysRole::getRoleType, RoleTypeEnum.SYSTEM_ROLE.getCode());
sysRoleLambdaQueryWrapper.or(i -> i.eq(SysRole::getRoleCompanyId, companyId));
sysRoleLambdaQueryWrapper.select(SysRole::getRoleName, SysRole::getRoleId, SysRole::getRoleCode, SysRole::getRoleType);
List<SysRole> sysRoleList = this.list(sysRoleLambdaQueryWrapper);
if (ObjectUtil.isEmpty(sysRoleList)) {
return new ArrayList<>();
}
return BeanUtil.copyToList(sysRoleList, SysRoleDTO.class, CopyOptions.create().ignoreError());
}
/**
*
*