From b49cdbbc9516352d1f4511e4223fa9d089b057b9 Mon Sep 17 00:00:00 2001 From: RuoYi <yzz_ivy@163.com> Date: 星期四, 27 一月 2022 12:12:30 +0800 Subject: [PATCH] 用户访问控制时校验数据权限,防止越权 --- src/main/java/com/ruoyi/project/system/service/impl/SysRoleServiceImpl.java | 31 +++++++++++++++++++++++++++---- 1 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysRoleServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysRoleServiceImpl.java index 81f4192..3ae790d 100644 --- a/src/main/java/com/ruoyi/project/system/service/impl/SysRoleServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/service/impl/SysRoleServiceImpl.java @@ -9,13 +9,15 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.ruoyi.common.constant.UserConstants; -import com.ruoyi.common.exception.CustomException; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.framework.aspectj.lang.annotation.DataScope; import com.ruoyi.project.system.domain.SysRole; import com.ruoyi.project.system.domain.SysRoleDept; import com.ruoyi.project.system.domain.SysRoleMenu; +import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.domain.SysUserRole; import com.ruoyi.project.system.mapper.SysRoleDeptMapper; import com.ruoyi.project.system.mapper.SysRoleMapper; @@ -120,7 +122,7 @@ * @return 閫変腑瑙掕壊ID鍒楄〃 */ @Override - public List<Integer> selectRoleListByUserId(Long userId) + public List<Long> selectRoleListByUserId(Long userId) { return roleMapper.selectRoleListByUserId(userId); } @@ -183,7 +185,27 @@ { if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) { - throw new CustomException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳瑙掕壊"); + throw new ServiceException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳瑙掕壊"); + } + } + + /** + * 鏍¢獙瑙掕壊鏄惁鏈夋暟鎹潈闄� + * + * @param roleId 瑙掕壊id + */ + @Override + public void checkRoleDataScope(Long roleId) + { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) + { + SysRole role = new SysRole(); + role.setRoleId(roleId); + List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role); + if (StringUtils.isEmpty(roles)) + { + throw new ServiceException("娌℃湁鏉冮檺璁块棶瑙掕壊鏁版嵁锛�"); + } } } @@ -339,10 +361,11 @@ for (Long roleId : roleIds) { checkRoleAllowed(new SysRole(roleId)); + checkRoleDataScope(roleId); SysRole role = selectRoleById(roleId); if (countUserRoleByRoleId(roleId) > 0) { - throw new CustomException(String.format("%1$s宸插垎閰�,涓嶈兘鍒犻櫎", role.getRoleName())); + throw new ServiceException(String.format("%1$s宸插垎閰�,涓嶈兘鍒犻櫎", role.getRoleName())); } } // 鍒犻櫎瑙掕壊涓庤彍鍗曞叧鑱� -- Gitblit v1.9.3