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

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.mapper.BaseMapperX;
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.module.system.controller.admin.permission.vo.role.RolePageReqVO;
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.HashSet;
import java.util.List;
import java.util.Objects;
@Mapper
public interface RoleMapper extends BaseMapperX<RoleDO> {
default PageResult<RoleDO> selectPage(RolePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<RoleDO>()
.eqIfPresent(RoleDO::getOrganId, reqVO.getOrganId())
.likeIfPresent(RoleDO::getName, reqVO.getName())
LambdaQueryWrapperX<RoleDO> lambdaQueryWrapperX = new LambdaQueryWrapperX<RoleDO>();
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
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())
.eqIfPresent(RoleDO::getStatus, reqVO.getStatus())
.betweenIfPresent(BaseDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(RoleDO::getId));
.orderByDesc(RoleDO::getId);
return selectPage(reqVO, lambdaQueryWrapperX);
}
default RoleDO selectByName(String name, Long organId) {
@@ -57,6 +57,8 @@ public interface RoleService {
*/
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.organ.core.aop.OrganIgnore;
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.module.system.controller.admin.permission.vo.role.RolePageReqVO;
import com.cf.imes.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
@@ -50,6 +51,9 @@ public class RoleServiceImpl implements RoleService {
@Resource
private RoleMapper roleMapper;
@Resource
private RoleService roleService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createRole(RoleSaveReqVO createReqVO, Integer type) {
@@ -153,9 +157,12 @@ public class RoleServiceImpl implements RoleService {
*
* @param id 角色编号
*/
@VisibleForTesting
void validateRoleForUpdate(Long id) {
RoleDO roleDO = roleMapper.selectById(id);
// @VisibleForTesting
@OrganIgnore
@Override
public void validateRoleForUpdate(Long id) {
RoleDO roleDO = roleService.getRole(id);
//RoleDO roleDO = roleMapper.selectOne(RoleDO::getId, id);
if (roleDO == null) {
throw exception(ROLE_NOT_EXISTS);
}
@@ -166,6 +173,7 @@ public class RoleServiceImpl implements RoleService {
}
@Override
@OrganIgnore
public RoleDO getRole(Long id) {
return roleMapper.selectById(id);
}
@@ -188,7 +196,16 @@ public class RoleServiceImpl implements RoleService {
@Override
@OrganIgnore
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);
}
@@ -217,7 +234,7 @@ public class RoleServiceImpl implements RoleService {
}
@Override
//@OrganIgnore
@OrganIgnore
public PageResult<RoleDO> getRolePage(RolePageReqVO reqVO) {
return roleMapper.selectPage(reqVO);
}