From b41b2e8f371cf2c8c3eb3f3533f138e9ffd74afc Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Thu, 12 Dec 2024 12:12:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A6=85=E9=81=93#953=E3=80=81#954=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/enums/ErrorCodeConstants.java | 1 + .../controller/admin/dept/DeptController.java | 11 +++++--- .../permission/PermissionServiceImpl.java | 8 +++++- .../service/permission/RoleServiceImpl.java | 25 ++++++++++++++++++- 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index 430c6b235..cb9120cb6 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -39,6 +39,7 @@ public class ErrorCodeConstants { public static final ErrorCode ROLE_NOT_SUPERADMIN_NO_ORGAN_ID_OPER_ERROR = new ErrorCode(1_002_002_007, "非超管分配权限"); public static final ErrorCode BUILDIN_ROLE_MODIFY_PERMISSION_ERROR = new ErrorCode(1_002_002_008, "修改内置角色下菜单权限的权限不足"); public static final ErrorCode SELF_ROLE_MODIFY_PERMISSION_ERROR = new ErrorCode(1_002_002_009, "无法修改自身的角色菜单权限"); + public static final ErrorCode SELF_ROLE_MODIFY_ERROR = new ErrorCode(1_002_002_010, "无法修改自身的角色"); // ========== 用户模块 1-002-003-000 ========== public static final ErrorCode USER_USERNAME_EXISTS = new ErrorCode(1_002_003_000, "手机号已经存在"); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/DeptController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/DeptController.java index e9c6e661d..ff225ae45 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/DeptController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/dept/DeptController.java @@ -12,6 +12,7 @@ import com.cf.imes.module.system.service.dept.DeptService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -69,9 +70,13 @@ public class DeptController { @GetMapping(value = {"/list-all-simple", "/simple-list"}) @Operation(summary = "获取部门精简信息列表", description = "只包含被开启的部门,主要用于前端的下拉选项") - public CommonResult> getSimpleDeptList() { - List list = deptService.getDeptList( - new DeptListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus())); + public CommonResult> getSimpleDeptList(@Valid DeptListReqVO reqVO) { + // 有效部门的请求,传入organid就查对应的,没有就查登录人下的 + DeptListReqVO efficDeptReqVO = new DeptListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus()); + if (ObjectUtils.allNotNull(reqVO, reqVO.getOrganId())) { + efficDeptReqVO.setOrganId(reqVO.getOrganId()); + } + List list = deptService.getDeptList(efficDeptReqVO); return success(BeanUtils.toBean(deptService.removeUnowndDept(list), DeptSimpleRespVO.class)); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java index 574c56da9..cabc5a747 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/PermissionServiceImpl.java @@ -604,7 +604,13 @@ public class PermissionServiceImpl implements PermissionService { @Override public Set getUserRoleIdListByUserId(Long userId) { - return convertSet(userRoleMapper.selectListByUserId(userId), UserRoleDO::getRoleId); + List userRoleDOS = userRoleMapper.selectListByUserId(userId); + userRoleDOS.removeIf(ur -> { + Long roleId = ur.getRoleId(); + RoleDO role = roleService.getRoleFromCache(roleId); + return ObjectUtil.isNotNull(role) && CommonStatusEnum.DISABLE.getStatus().equals(role.getStatus()); + }); + return convertSet(userRoleDOS, UserRoleDO::getRoleId); } @Override diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/RoleServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/RoleServiceImpl.java index 6a5a02a27..0147bab85 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/RoleServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/permission/RoleServiceImpl.java @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.spring.SpringUtil; import com.cf.imes.framework.common.enums.CommonStatusEnum; +import com.cf.imes.framework.common.exception.ServiceException; +import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants; import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.util.collection.CollectionUtils; import com.cf.imes.framework.common.util.object.BeanUtils; @@ -18,6 +20,7 @@ import com.cf.imes.module.system.dal.dataobject.permission.RoleDO; import com.cf.imes.module.system.dal.mysql.permission.RoleMapper; import com.cf.imes.module.system.dal.redis.RedisKeyConstants; import com.cf.imes.module.system.dal.redis.RedisRefreshChannelTopicConstants; +import com.cf.imes.module.system.enums.ErrorCodeConstants; import com.cf.imes.module.system.enums.permission.DataScopeEnum; import com.cf.imes.module.system.enums.permission.RoleCodeEnum; import com.cf.imes.module.system.enums.permission.RoleTypeEnum; @@ -86,6 +89,8 @@ public class RoleServiceImpl implements RoleService { validateRoleForUpdate(updateReqVO.getId()); // 校验角色的唯一字段是否重复 validateRoleDuplicate(updateReqVO.getName(), updateReqVO.getCode(), updateReqVO.getId(), updateReqVO.getOrganId()); + // 校验自身角色 + validateModifySelfRole(updateReqVO.getId()); // 更新到数据库 RoleDO updateObj = BeanUtils.toBean(updateReqVO, RoleDO.class); @@ -99,7 +104,8 @@ public class RoleServiceImpl implements RoleService { public void updateRoleStatus(Long id, Integer status) { // 校验是否可以更新 validateRoleForUpdate(id); - + // 校验自身角色 + validateModifySelfRole(id); // 更新状态 RoleDO updateObj = new RoleDO().setId(id).setStatus(status); roleMapper.updateById(updateObj); @@ -107,6 +113,23 @@ public class RoleServiceImpl implements RoleService { scanAndDelKeys(String.format(REDIS_ROLE_KEY_PATTERN, updateObj.getId())); } + /** + * 校验自身角色 + * + * @param roleId + */ + private void validateModifySelfRole(Long roleId) { + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + throw new ServiceException(GlobalErrorCodeConstants.UNAUTHORIZED); + } + Set roleIds = permissionService.getUserRoleIdListByUserId(loginUser.getId()); + if (roleIds.contains(roleId)) { + throw new ServiceException(ErrorCodeConstants.SELF_ROLE_MODIFY_ERROR); + } + } + + @Override @CacheEvict(value = RedisKeyConstants.ROLE, key = "#id") public void updateRoleDataScope(Long id, Integer dataScope, Set dataScopeDeptIds) {