From eb2e2f61be25951d86a2935866a9ab677243a37e Mon Sep 17 00:00:00 2001 From: zhf-oss <862592396@qq.com> Date: Tue, 22 Mar 2022 09:08:22 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BF=AE=E6=94=B9=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=97=B6=EF=BC=8C=E5=8F=AA=E8=83=BD=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=BD=93=E5=89=8D=E7=94=A8=E6=88=B7=E7=9A=84=E7=BC=93?= =?UTF-8?q?=E5=AD=98=EF=BC=8C=E5=AF=BC=E8=87=B4=E5=85=B6=E5=AE=83=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E7=94=A8=E6=88=B7=E7=9A=84=E7=BC=93=E5=AD=98=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E5=8F=8A=E6=97=B6=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysRoleController.java | 31 +++++++++++++------ .../com/ruoyi/common/helper/LoginHelper.java | 9 +++++- .../ruoyi/system/mapper/SysUserMapper.java | 8 +++++ .../ruoyi/system/service/ISysUserService.java | 8 +++++ .../ruoyi/system/service/SysLoginService.java | 2 +- .../service/impl/SysUserServiceImpl.java | 11 +++++++ .../resources/mapper/system/SysUserMapper.xml | 11 +++++++ 7 files changed, 69 insertions(+), 11 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java index 5d9a20615..56565eb19 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java @@ -1,22 +1,25 @@ package com.ruoyi.web.controller.system; import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.hutool.core.util.ObjectUtil; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.controller.BaseController; -import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; -import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.mapper.SysUserRoleMapper; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.SysLoginService; import com.ruoyi.system.service.SysPermissionService; import io.swagger.annotations.*; import lombok.RequiredArgsConstructor; @@ -25,6 +28,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.stream.Collectors; /** * 角色信息 @@ -41,6 +45,8 @@ public class SysRoleController extends BaseController { private final ISysRoleService roleService; private final ISysUserService userService; private final SysPermissionService permissionService; + private final SysUserRoleMapper sysUserRoleMapper; + private final SysLoginService loginService; @ApiOperation("查询角色信息列表") @SaCheckPermission("system:role:list") @@ -104,12 +110,19 @@ public class SysRoleController extends BaseController { if (roleService.updateRole(role) > 0) { // 更新缓存用户权限 - LoginUser loginUser = getLoginUser(); - SysUser sysUser = userService.selectUserById(loginUser.getUserId()); - if (ObjectUtil.isNotNull(sysUser) && !sysUser.isAdmin()) { - loginUser.setMenuPermission(permissionService.getMenuPermission(sysUser)); - LoginHelper.setLoginUser(loginUser); - } + List userIdList = sysUserRoleMapper.selectList(new LambdaQueryWrapper().eq(SysUserRole::getRoleId, role.getRoleId())) + .stream().map(SysUserRole::getUserId).collect(Collectors.toList()); + userService.selectUserByUserIds(userIdList).forEach(sysUser -> { + // 存储在saToken的用户key值 + String userId = sysUser.getUserType() + StrUtil.COLON + sysUser.getUserId(); + // 获取对应用户的token + String token = StpUtil.getTokenValueByLoginId(userId); + if (StrUtil.isBlank(token)) { + return; + } + // 更新用户缓存 + LoginHelper.setLoginUserByToken(token, loginService.buildLoginUser(sysUser)); + }); return R.ok(); } return R.fail("修改角色'" + role.getRoleName() + "'失败,请联系管理员"); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java b/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java index 7875c5630..52180fa6c 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/helper/LoginHelper.java @@ -13,7 +13,7 @@ import lombok.NoArgsConstructor; /** * 登录鉴权助手 - * + * * user_type 为 用户类型 同一个用户表 可以有多种用户类型 例如 pc,app * deivce 为 设备类型 同一个用户类型 可以有 多种设备类型 例如 web,ios * 可以组成 用户类型与设备类型多对多的 权限灵活控制 @@ -61,6 +61,13 @@ public class LoginHelper { StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser); } + /** + * 根据token修改不同用户的缓存 + */ + public static void setLoginUserByToken(String token, LoginUser loginUser) { + StpUtil.getTokenSessionByToken(token).set(LOGIN_USER_KEY, loginUser); + } + /** * 获取用户(多级缓存) */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index 46e48fe62..801e7350b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -76,4 +76,12 @@ public interface SysUserMapper extends BaseMapperPlus selectUserByUserIdList(@Param("userIdList") List userIdList); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java index 741ae4bc0..45ad9746a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -200,4 +200,12 @@ public interface ISysUserService { */ int deleteUserByIds(Long[] userIds); + /** + * 根据用户编号查询用户 + * + * @param userIdList 用户编号 + * @return 用户列表 + */ + List selectUserByUserIds(List userIdList); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java index 62ca18b57..8c98864a0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java @@ -139,7 +139,7 @@ public class SysLoginService { /** * 构建登录用户 */ - private LoginUser buildLoginUser(SysUser user) { + public LoginUser buildLoginUser(SysUser user) { LoginUser loginUser = new LoginUser(); loginUser.setUserId(user.getUserId()); loginUser.setDeptId(user.getDeptId()); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 09c5ba2cf..5f81bfd99 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -488,4 +488,15 @@ public class SysUserServiceImpl implements ISysUserService { return baseMapper.deleteBatchIds(ids); } + /** + * 根据用户编号查询用户 + * + * @param userIdList 用户编号 + * @return 用户列表 + */ + @Override + public List selectUserByUserIds(List userIdList) { + return baseMapper.selectUserByUserIdList(userIdList); + } + } diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 311778870..20b434b1f 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -126,5 +126,16 @@ where u.del_flag = '0' and u.user_id = #{userId} + +