处理超级管理员与普通角色的 角色权限问题

This commit is contained in:
yangsb
2024-04-11 11:17:40 +08:00
parent 2bf29a9356
commit 86824ebc49
3 changed files with 44 additions and 8 deletions
@@ -4,6 +4,7 @@ import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO; import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.system.controller.admin.permission.vo.role.RolePageReqVO; import com.cf.imes.module.system.controller.admin.permission.vo.role.RolePageReqVO;
import com.cf.imes.module.system.dal.dataobject.permission.RoleDO; import com.cf.imes.module.system.dal.dataobject.permission.RoleDO;
@@ -13,18 +14,34 @@ import org.springframework.lang.Nullable;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects;
@Mapper @Mapper
public interface RoleMapper extends BaseMapperX<RoleDO> { public interface RoleMapper extends BaseMapperX<RoleDO> {
default PageResult<RoleDO> selectPage(RolePageReqVO reqVO) { default PageResult<RoleDO> selectPage(RolePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<RoleDO>() LambdaQueryWrapperX<RoleDO> lambdaQueryWrapperX = new LambdaQueryWrapperX<RoleDO>();
.eqIfPresent(RoleDO::getOrganId, reqVO.getOrganId()) LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
.likeIfPresent(RoleDO::getName, reqVO.getName()) Boolean isSupAdmin = loginUser.getIsSupAdmin();
if(isSupAdmin && Objects.isNull(reqVO.getOrganId())) {
//如果是超级管理员并且未传organId,就查看所有组织
}
if(isSupAdmin && !Objects.isNull(reqVO.getOrganId())) {
//如果是超级管理员并且传入organId,就查看传入的组织
lambdaQueryWrapperX.eqIfPresent(RoleDO::getOrganId, reqVO.getOrganId());
}
if(!isSupAdmin) {
//如果不是超级管理员,就查看组织id为0和自身的组织
lambdaQueryWrapperX.inIfPresent(RoleDO::getOrganId,0L,loginUser.getOrganId());
}
lambdaQueryWrapperX.likeIfPresent(RoleDO::getName, reqVO.getName())
.likeIfPresent(RoleDO::getCode, reqVO.getCode()) .likeIfPresent(RoleDO::getCode, reqVO.getCode())
.eqIfPresent(RoleDO::getStatus, reqVO.getStatus()) .eqIfPresent(RoleDO::getStatus, reqVO.getStatus())
.betweenIfPresent(BaseDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(BaseDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(RoleDO::getId)); .orderByDesc(RoleDO::getId);
return selectPage(reqVO, lambdaQueryWrapperX);
} }
default RoleDO selectByName(String name, Long organId) { default RoleDO selectByName(String name, Long organId) {
@@ -57,6 +57,8 @@ public interface RoleService {
*/ */
void updateRoleDataScope(Long id, Integer dataScope, Set<Long> dataScopeDeptIds); void updateRoleDataScope(Long id, Integer dataScope, Set<Long> dataScopeDeptIds);
void validateRoleForUpdate(Long id);
/** /**
* 获得角色 * 获得角色
* *
@@ -11,6 +11,7 @@ import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.aop.OrganIgnore; import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.system.controller.admin.permission.vo.role.RolePageReqVO; import com.cf.imes.module.system.controller.admin.permission.vo.role.RolePageReqVO;
import com.cf.imes.module.system.controller.admin.permission.vo.role.RoleSaveReqVO; import com.cf.imes.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
@@ -50,6 +51,9 @@ public class RoleServiceImpl implements RoleService {
@Resource @Resource
private RoleMapper roleMapper; private RoleMapper roleMapper;
@Resource
private RoleService roleService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long createRole(RoleSaveReqVO createReqVO, Integer type) { public Long createRole(RoleSaveReqVO createReqVO, Integer type) {
@@ -153,9 +157,12 @@ public class RoleServiceImpl implements RoleService {
* *
* @param id 角色编号 * @param id 角色编号
*/ */
@VisibleForTesting // @VisibleForTesting
void validateRoleForUpdate(Long id) { @OrganIgnore
RoleDO roleDO = roleMapper.selectById(id); @Override
public void validateRoleForUpdate(Long id) {
RoleDO roleDO = roleService.getRole(id);
//RoleDO roleDO = roleMapper.selectOne(RoleDO::getId, id);
if (roleDO == null) { if (roleDO == null) {
throw exception(ROLE_NOT_EXISTS); throw exception(ROLE_NOT_EXISTS);
} }
@@ -166,6 +173,7 @@ public class RoleServiceImpl implements RoleService {
} }
@Override @Override
@OrganIgnore
public RoleDO getRole(Long id) { public RoleDO getRole(Long id) {
return roleMapper.selectById(id); return roleMapper.selectById(id);
} }
@@ -188,7 +196,16 @@ public class RoleServiceImpl implements RoleService {
@Override @Override
@OrganIgnore
public List<RoleDO> getRoleListByStatus(Collection<Integer> statuses) { public List<RoleDO> getRoleListByStatus(Collection<Integer> statuses) {
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
assert loginUser != null;
if(!loginUser.getIsSupAdmin()) {
return roleMapper.selectList(new LambdaQueryWrapperX<RoleDO>()
.in(RoleDO::getStatus, statuses)
.in(RoleDO::getOrganId, loginUser.getOrganId(), 0L)
);
}
return roleMapper.selectListByStatus(statuses); return roleMapper.selectListByStatus(statuses);
} }
@@ -217,7 +234,7 @@ public class RoleServiceImpl implements RoleService {
} }
@Override @Override
//@OrganIgnore @OrganIgnore
public PageResult<RoleDO> getRolePage(RolePageReqVO reqVO) { public PageResult<RoleDO> getRolePage(RolePageReqVO reqVO) {
return roleMapper.selectPage(reqVO); return roleMapper.selectPage(reqVO);
} }