From cdb509a4fa10bf32fd1341e04dee7c9c9c7f8c20 Mon Sep 17 00:00:00 2001 From: jenn <244251889@qq.com> Date: 星期五, 10 三月 2023 21:15:54 +0800 Subject: [PATCH] fix 修复用户相关更新操作会越权的问题 --- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 127 ++++++++++++++++++++++++++---------------- 1 files changed, 78 insertions(+), 49 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index ee36fe5..ea9cf94 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -1,6 +1,5 @@ package com.ruoyi.system.service.impl; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; @@ -14,6 +13,7 @@ import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.service.UserService; +import com.ruoyi.common.core.utils.MapstructUtils; import com.ruoyi.common.core.utils.StreamUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.mybatis.core.page.PageQuery; @@ -36,8 +36,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 鐢ㄦ埛 涓氬姟灞傚鐞� @@ -201,14 +203,11 @@ * @return 缁撴灉 */ @Override - public String checkUserNameUnique(SysUserBo user) { + public boolean checkUserNameUnique(SysUserBo user) { boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>() .eq(SysUser::getUserName, user.getUserName()) .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** @@ -217,14 +216,11 @@ * @param user 鐢ㄦ埛淇℃伅 */ @Override - public String checkPhoneUnique(SysUserBo user) { + public boolean checkPhoneUnique(SysUserBo user) { boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>() .eq(SysUser::getPhonenumber, user.getPhonenumber()) .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** @@ -233,14 +229,11 @@ * @param user 鐢ㄦ埛淇℃伅 */ @Override - public String checkEmailUnique(SysUserBo user) { + public boolean checkEmailUnique(SysUserBo user) { boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>() .eq(SysUser::getEmail, user.getEmail()) .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** @@ -250,7 +243,7 @@ */ @Override public void checkUserAllowed(SysUserBo user) { - if (ObjectUtil.isNotNull(user.getUserId()) && user.isAdmin()) { + if (ObjectUtil.isNotNull(user.getUserId()) && user.isSuperAdmin()) { throw new ServiceException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳鐢ㄦ埛"); } } @@ -262,7 +255,7 @@ */ @Override public void checkUserDataScope(Long userId) { - if (!LoginHelper.isAdmin()) { + if (!LoginHelper.isSuperAdmin()) { SysUserBo user = new SysUserBo(); user.setUserId(userId); List<SysUserVo> users = this.selectUserList(user); @@ -281,9 +274,10 @@ @Override @Transactional(rollbackFor = Exception.class) public int insertUser(SysUserBo user) { - SysUser sysUser = BeanUtil.copyProperties(user, SysUser.class); + SysUser sysUser = MapstructUtils.convert(user, SysUser.class); // 鏂板鐢ㄦ埛淇℃伅 int rows = baseMapper.insert(sysUser); + user.setUserId(sysUser.getUserId()); // 鏂板鐢ㄦ埛宀椾綅鍏宠仈 insertUserPost(user); // 鏂板鐢ㄦ埛涓庤鑹茬鐞� @@ -298,10 +292,11 @@ * @return 缁撴灉 */ @Override - public boolean registerUser(SysUserBo user) { + public boolean registerUser(SysUserBo user, String tenantId) { user.setCreateBy(user.getUserId()); user.setUpdateBy(user.getUserId()); - SysUser sysUser = BeanUtil.copyProperties(user, SysUser.class); + SysUser sysUser = MapstructUtils.convert(user, SysUser.class); + sysUser.setTenantId(tenantId); return baseMapper.insert(sysUser) > 0; } @@ -323,8 +318,13 @@ userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, userId)); // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞� insertUserPost(user); - SysUser sysUser = BeanUtil.copyProperties(user, SysUser.class); - return baseMapper.updateById(sysUser); + SysUser sysUser = MapstructUtils.convert(user, SysUser.class); + //闃叉閿欒鏇存柊鍚庡鑷寸殑鏁版嵁璇垹闄� + int flag = baseMapper.updateById(sysUser); + if (flag <= 0){ + throw new ServiceException("淇敼鐢ㄦ埛"+user.getUserName()+"淇℃伅澶辫触"); + } + return flag; } /** @@ -349,8 +349,10 @@ */ @Override public int updateUserStatus(SysUserBo user) { - SysUser sysUser = BeanUtil.copyProperties(user, SysUser.class); - return baseMapper.updateById(sysUser); + return baseMapper.update(null, + new LambdaUpdateWrapper<SysUser>() + .set(SysUser::getStatus, user.getStatus()) + .eq(SysUser::getUserId, user.getUserId())); } /** @@ -361,50 +363,43 @@ */ @Override public int updateUserProfile(SysUserBo user) { - SysUser sysUser = BeanUtil.copyProperties(user, SysUser.class); - return baseMapper.updateById(sysUser); + return baseMapper.update(null, + new LambdaUpdateWrapper<SysUser>() + .set(ObjectUtil.isNotNull(user.getNickName()), SysUser::getNickName, user.getNickName()) + .set(SysUser::getPhonenumber, user.getPhonenumber()) + .set(SysUser::getEmail, user.getEmail()) + .set(SysUser::getSex, user.getSex()) + .eq(SysUser::getUserId, user.getUserId())); } /** * 淇敼鐢ㄦ埛澶村儚 * - * @param userName 鐢ㄦ埛鍚� + * @param userId 鐢ㄦ埛ID * @param avatar 澶村儚鍦板潃 * @return 缁撴灉 */ @Override - public boolean updateUserAvatar(String userName, Long avatar) { + public boolean updateUserAvatar(Long userId, Long avatar) { return baseMapper.update(null, new LambdaUpdateWrapper<SysUser>() .set(SysUser::getAvatar, avatar) - .eq(SysUser::getUserName, userName)) > 0; + .eq(SysUser::getUserId, userId)) > 0; } /** * 閲嶇疆鐢ㄦ埛瀵嗙爜 * - * @param user 鐢ㄦ埛淇℃伅 - * @return 缁撴灉 - */ - @Override - public int resetPwd(SysUserBo user) { - SysUser sysUser = BeanUtil.copyProperties(user, SysUser.class); - return baseMapper.updateById(sysUser); - } - - /** - * 閲嶇疆鐢ㄦ埛瀵嗙爜 - * - * @param userName 鐢ㄦ埛鍚� + * @param userId 鐢ㄦ埛ID * @param password 瀵嗙爜 * @return 缁撴灉 */ @Override - public int resetUserPwd(String userName, String password) { + public int resetUserPwd(Long userId, String password) { return baseMapper.update(null, new LambdaUpdateWrapper<SysUser>() .set(SysUser::getPassword, password) - .eq(SysUser::getUserName, userName)); + .eq(SysUser::getUserId, userId)); } /** @@ -424,8 +419,20 @@ public void insertUserPost(SysUserBo user) { Long[] posts = user.getPostIds(); if (ArrayUtil.isNotEmpty(posts)) { + //鍒ゆ柇鏄惁鍏锋湁姝よ鑹茬殑宀椾綅鏉冮檺 + List<Long> postList = postMapper.selectPostListByUserId(LoginHelper.getUserId()); + if (postList.isEmpty()){ + throw new ServiceException("鎮ㄤ笉鍏锋湁鎿嶄綔宀椾綅鐨勬潈闄�"); + } + List<Long> postIdList = Arrays.asList(posts); + List<Long> canDoPostList = postIdList.stream() + .filter(postList::contains) + .collect(Collectors.toList()); + if (canDoPostList.isEmpty()){ + throw new ServiceException("鎮ㄤ笉鍏锋湁鎿嶄綔褰撳墠宀椾綅鐨勬潈闄�"); + } // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞� - List<SysUserPost> list = StreamUtils.toList(List.of(posts), postId -> { + List<SysUserPost> list = StreamUtils.toList(canDoPostList, postId -> { SysUserPost up = new SysUserPost(); up.setUserId(user.getUserId()); up.setPostId(postId); @@ -443,8 +450,20 @@ */ public void insertUserRole(Long userId, Long[] roleIds) { if (ArrayUtil.isNotEmpty(roleIds)) { + //鍒ゆ柇鏄惁鍏锋湁姝よ鑹茬殑鎿嶄綔鏉冮檺 + List<Long> roleList = roleMapper.selectRoleListByUserId(LoginHelper.getUserId()); + if (roleList.isEmpty()){ + throw new ServiceException("鎮ㄤ笉鍏锋湁鎿嶄綔瑙掕壊鐨勬潈闄�"); + } + List<Long> roleIdList = Arrays.asList(roleIds); + List<Long> canDoRoleList = roleIdList.stream() + .filter(roleList::contains) + .collect(Collectors.toList()); + if (canDoRoleList.isEmpty()){ + throw new ServiceException("鎮ㄤ笉鍏锋湁鎿嶄綔褰撳墠瑙掕壊鐨勬潈闄�"); + } // 鏂板鐢ㄦ埛涓庤鑹茬鐞� - List<SysUserRole> list = StreamUtils.toList(List.of(roleIds), roleId -> { + List<SysUserRole> list = StreamUtils.toList(canDoRoleList, roleId -> { SysUserRole ur = new SysUserRole(); ur.setUserId(userId); ur.setRoleId(roleId); @@ -467,7 +486,12 @@ userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId)); // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶈〃 userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, userId)); - return baseMapper.deleteById(userId); + // 闃叉鏇存柊澶辫触瀵艰嚧鐨勬暟鎹垹闄� + int flag = baseMapper.deleteById(userId); + if (flag <= 0){ + throw new ServiceException("鍒犻櫎鐢ㄦ埛鍙戠敓寮傚父"); + } + return flag; } /** @@ -488,7 +512,12 @@ userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, ids)); // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶈〃 userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().in(SysUserPost::getUserId, ids)); - return baseMapper.deleteBatchIds(ids); + // 闃叉鏇存柊澶辫触瀵艰嚧鐨勬暟鎹垹闄� + int flag = baseMapper.deleteBatchIds(ids); + if (flag <= 0){ + throw new ServiceException("鍒犻櫎鐢ㄦ埛鍙戠敓寮傚父"); + } + return flag; } @Cacheable(cacheNames = CacheNames.SYS_USER_NAME, key = "#userId") -- Gitblit v1.9.3