From 0ec6fbd34ca4633a415e17ee50450f12e815a4aa Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期一, 13 三月 2023 23:29:05 +0800 Subject: [PATCH] fix 修复 管理租户被修改导致无法登录超管账号问题 --- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 165 +++++++++++++++++++++++++++++++----------------------- 1 files changed, 94 insertions(+), 71 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 a8e6418..5c69b77 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 @@ -201,14 +201,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 +214,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,24 +227,21 @@ * @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; } /** * 鏍¢獙鐢ㄦ埛鏄惁鍏佽鎿嶄綔 * - * @param user 鐢ㄦ埛淇℃伅 + * @param userId 鐢ㄦ埛ID */ @Override - public void checkUserAllowed(SysUserBo user) { - if (ObjectUtil.isNotNull(user.getUserId()) && user.isSuperAdmin()) { + public void checkUserAllowed(Long userId) { + if (ObjectUtil.isNotNull(userId) && LoginHelper.isSuperAdmin(userId)) { throw new ServiceException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳鐢ㄦ埛"); } } @@ -262,13 +253,14 @@ */ @Override public void checkUserDataScope(Long userId) { - if (!LoginHelper.isSuperAdmin()) { - SysUserBo user = new SysUserBo(); - user.setUserId(userId); - List<SysUserVo> users = this.selectUserList(user); - if (CollUtil.isEmpty(users)) { - throw new ServiceException("娌℃湁鏉冮檺璁块棶鐢ㄦ埛鏁版嵁锛�"); - } + if (ObjectUtil.isNull(userId)) { + return; + } + if (LoginHelper.isSuperAdmin()) { + return; + } + if (ObjectUtil.isNull(baseMapper.selectUserById(userId))) { + throw new ServiceException("娌℃湁鏉冮檺璁块棶鐢ㄦ埛鏁版嵁锛�"); } } @@ -286,9 +278,9 @@ int rows = baseMapper.insert(sysUser); user.setUserId(sysUser.getUserId()); // 鏂板鐢ㄦ埛宀椾綅鍏宠仈 - insertUserPost(user); + insertUserPost(user, false); // 鏂板鐢ㄦ埛涓庤鑹茬鐞� - insertUserRole(user); + insertUserRole(user, false); return rows; } @@ -316,17 +308,17 @@ @Override @Transactional(rollbackFor = Exception.class) public int updateUser(SysUserBo user) { - Long userId = user.getUserId(); - // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱� - userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId)); // 鏂板鐢ㄦ埛涓庤鑹茬鐞� - insertUserRole(user); - // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱� - userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, userId)); + insertUserRole(user, true); // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞� - insertUserPost(user); + insertUserPost(user, true); SysUser sysUser = MapstructUtils.convert(user, SysUser.class); - return baseMapper.updateById(sysUser); + // 闃叉閿欒鏇存柊鍚庡鑷寸殑鏁版嵁璇垹闄� + int flag = baseMapper.updateById(sysUser); + if (flag < 1) { + throw new ServiceException("淇敼鐢ㄦ埛" + user.getUserName() + "淇℃伅澶辫触"); + } + return flag; } /** @@ -340,19 +332,22 @@ public void insertUserAuth(Long userId, Long[] roleIds) { userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>() .eq(SysUserRole::getUserId, userId)); - insertUserRole(userId, roleIds); + insertUserRole(userId, roleIds, false); } /** * 淇敼鐢ㄦ埛鐘舵�� * - * @param user 鐢ㄦ埛淇℃伅 + * @param userId 鐢ㄦ埛ID + * @param status 甯愬彿鐘舵�� * @return 缁撴灉 */ @Override - public int updateUserStatus(SysUserBo user) { - SysUser sysUser = MapstructUtils.convert(user, SysUser.class); - return baseMapper.updateById(sysUser); + public int updateUserStatus(Long userId, String status) { + return baseMapper.update(null, + new LambdaUpdateWrapper<SysUser>() + .set(SysUser::getStatus, status) + .eq(SysUser::getUserId, userId)); } /** @@ -363,69 +358,69 @@ */ @Override public int updateUserProfile(SysUserBo user) { - SysUser sysUser = MapstructUtils.convert(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 avatar 澶村儚鍦板潃 + * @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 = MapstructUtils.convert(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)); } /** * 鏂板鐢ㄦ埛瑙掕壊淇℃伅 * - * @param user 鐢ㄦ埛瀵硅薄 + * @param user 鐢ㄦ埛瀵硅薄 + * @param clear 娓呴櫎宸插瓨鍦ㄧ殑鍏宠仈鏁版嵁 */ - public void insertUserRole(SysUserBo user) { - this.insertUserRole(user.getUserId(), user.getRoleIds()); + public void insertUserRole(SysUserBo user, boolean clear) { + this.insertUserRole(user.getUserId(), user.getRoleIds(), clear); } /** * 鏂板鐢ㄦ埛宀椾綅淇℃伅 * - * @param user 鐢ㄦ埛瀵硅薄 + * @param user 鐢ㄦ埛瀵硅薄 + * @param clear 娓呴櫎宸插瓨鍦ㄧ殑鍏宠仈鏁版嵁 */ - public void insertUserPost(SysUserBo user) { + public void insertUserPost(SysUserBo user, boolean clear) { Long[] posts = user.getPostIds(); if (ArrayUtil.isNotEmpty(posts)) { + Long userId = LoginHelper.getUserId(); + if (clear) { + // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱� + userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, userId)); + } // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞� List<SysUserPost> list = StreamUtils.toList(List.of(posts), postId -> { SysUserPost up = new SysUserPost(); @@ -442,11 +437,29 @@ * * @param userId 鐢ㄦ埛ID * @param roleIds 瑙掕壊缁� + * @param clear 娓呴櫎宸插瓨鍦ㄧ殑鍏宠仈鏁版嵁 */ - public void insertUserRole(Long userId, Long[] roleIds) { + public void insertUserRole(Long userId, Long[] roleIds, boolean clear) { if (ArrayUtil.isNotEmpty(roleIds)) { + // 鍒ゆ柇鏄惁鍏锋湁姝よ鑹茬殑鎿嶄綔鏉冮檺 + List<SysRoleVo> roles = roleMapper.selectRoleList(new LambdaQueryWrapper<>()); + if (CollUtil.isEmpty(roles)) { + throw new ServiceException("娌℃湁鏉冮檺璁块棶瑙掕壊鐨勬暟鎹�"); + } + List<Long> roleList = StreamUtils.toList(roles, SysRoleVo::getRoleId); + if (!LoginHelper.isSuperAdmin(userId)) { + roleList.remove(UserConstants.SUPER_ADMIN_ID); + } + List<Long> canDoRoleList = StreamUtils.filter(List.of(roleIds), roleList::contains); + if (CollUtil.isEmpty(canDoRoleList)) { + throw new ServiceException("娌℃湁鏉冮檺璁块棶瑙掕壊鐨勬暟鎹�"); + } + if (clear) { + // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱� + userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId)); + } // 鏂板鐢ㄦ埛涓庤鑹茬鐞� - 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); @@ -469,7 +482,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 < 1) { + throw new ServiceException("鍒犻櫎鐢ㄦ埛澶辫触!"); + } + return flag; } /** @@ -482,7 +500,7 @@ @Transactional(rollbackFor = Exception.class) public int deleteUserByIds(Long[] userIds) { for (Long userId : userIds) { - checkUserAllowed(new SysUserBo(userId)); + checkUserAllowed(userId); checkUserDataScope(userId); } List<Long> ids = List.of(userIds); @@ -490,7 +508,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 < 1) { + throw new ServiceException("鍒犻櫎鐢ㄦ埛澶辫触!"); + } + return flag; } @Cacheable(cacheNames = CacheNames.SYS_USER_NAME, key = "#userId") -- Gitblit v1.9.3