mirror of https://gitee.com/stylefeng/roses
【8.1.0】【role】更新角色绑定
parent
5dad2154a9
commit
7b346938a4
|
@ -72,4 +72,12 @@ public interface SysRoleServiceApi {
|
||||||
*/
|
*/
|
||||||
List<SysRoleDTO> getRolesByIds(List<Long> roleIds);
|
List<SysRoleDTO> getRolesByIds(List<Long> roleIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有系统角色和当前登录公司的角色集合
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2024/1/17 0:40
|
||||||
|
*/
|
||||||
|
List<SysRoleDTO> getSystemRoleAndCurrentCompanyRole(Long companyId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,4 +54,10 @@ public class SysRoleDTO {
|
||||||
@ChineseDescription("编码")
|
@ChineseDescription("编码")
|
||||||
private String roleCode;
|
private String roleCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色类型:10-系统角色,20-公司角色
|
||||||
|
*/
|
||||||
|
@ChineseDescription("角色类型:10-系统角色,20-公司角色")
|
||||||
|
private Integer roleType;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.RemoveRoleCallbackApi;
|
||||||
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveUserCallbackApi;
|
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.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.entity.SysUserRole;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum;
|
import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.user.mapper.SysUserRoleMapper;
|
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 javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -63,8 +66,7 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
|
||||||
}
|
}
|
||||||
|
|
||||||
// 清空已有的用户角色绑定
|
// 清空已有的用户角色绑定
|
||||||
LambdaQueryWrapper<SysUserRole> wrapper = this.createWrapper(sysUserRoleRequest);
|
this.removeRoleAlreadyBind(sysUserRoleRequest);
|
||||||
this.remove(wrapper);
|
|
||||||
|
|
||||||
// 重新绑定用户角色信息
|
// 重新绑定用户角色信息
|
||||||
Set<Long> roleIdList = sysUserRoleRequest.getRoleIdList();
|
Set<Long> roleIdList = sysUserRoleRequest.getRoleIdList();
|
||||||
|
@ -157,9 +159,8 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Long> findUserIdsByRoleId(Long roleId) {
|
public List<Long> findUserIdsByRoleId(Long roleId) {
|
||||||
SysUserRoleRequest userRoleRequest = new SysUserRoleRequest();
|
LambdaQueryWrapper<SysUserRole> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
userRoleRequest.setRoleId(roleId);
|
queryWrapper.eq(SysUserRole::getRoleId, roleId);
|
||||||
LambdaQueryWrapper<SysUserRole> queryWrapper = this.createWrapper(userRoleRequest);
|
|
||||||
queryWrapper.select(SysUserRole::getUserId);
|
queryWrapper.select(SysUserRole::getUserId);
|
||||||
List<SysUserRole> list = this.list(queryWrapper);
|
List<SysUserRole> list = this.list(queryWrapper);
|
||||||
return list.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
|
return list.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
|
||||||
|
@ -184,21 +185,56 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建查询wrapper
|
* 清空用户角色的绑定
|
||||||
*
|
*
|
||||||
* @author fengshuonan
|
* @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<>();
|
LambdaQueryWrapper<SysUserRole> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
|
||||||
Long userId = sysUserRoleRequest.getUserId();
|
// 2. 当前如果是超级管理员在操作,清空用户的系统角色和当前公司角色(因为超级管理员的绑定角色列表,可以看到系统角色和当前公司角色)
|
||||||
queryWrapper.eq(ObjectUtil.isNotNull(userId), SysUserRole::getUserId, userId);
|
boolean superAdminFlag = LoginContext.me().getSuperAdminFlag();
|
||||||
|
if (superAdminFlag) {
|
||||||
|
|
||||||
Long roleId = sysUserRoleRequest.getRoleId();
|
Set<Long> paramsRoleIdList = new HashSet<>(systemRoleIdList);
|
||||||
queryWrapper.eq(ObjectUtil.isNotNull(roleId), SysUserRole::getRoleId, roleId);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -163,7 +163,8 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
||||||
LambdaQueryWrapper<SysRole> wrapper = createWrapper(sysRoleRequest);
|
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);
|
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());
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取信息
|
* 获取信息
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue