Procházet zdrojové kódy

update 优化 LoginUser 解耦

疯狂的狮子li před 3 roky
rodič
revize
29462b83ff

+ 38 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/RoleDTO.java

@@ -0,0 +1,38 @@
+package com.ruoyi.common.core.domain.dto;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 角色
+ *
+ * @author Lion Li
+ */
+
+@Data
+@NoArgsConstructor
+public class RoleDTO implements Serializable {
+
+    /**
+     * 角色ID
+     */
+    private Long roleId;
+
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+    /**
+     * 角色权限
+     */
+    private String roleKey;
+
+    /**
+     * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)
+     */
+    private String dataScope;
+
+}

+ 7 - 8
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java

@@ -1,7 +1,6 @@
 package com.ruoyi.common.core.domain.model;
 
-import com.ruoyi.common.core.domain.entity.SysDept;
-import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.dto.RoleDTO;
 import com.ruoyi.common.helper.LoginHelper;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -32,6 +31,11 @@ public class LoginUser implements Serializable {
      */
     private Long deptId;
 
+    /**
+     * 部门名
+     */
+    private String deptName;
+
     /**
      * 用户唯一标识
      */
@@ -87,15 +91,10 @@ public class LoginUser implements Serializable {
      */
     private String username;
 
-    /**
-     * 部门对象
-     */
-    private SysDept dept;
-
     /**
      * 角色对象
      */
-    private List<SysRole> roles;
+    private List<RoleDTO> roles;
 
     /**
      * 数据权限 当前角色ID

+ 1 - 1
ruoyi-common/src/main/java/com/ruoyi/common/enums/DataScopeType.java

@@ -9,7 +9,7 @@ import lombok.Getter;
  * <p>
  * 语法支持 spel 模板表达式
  * <p>
- * 内置数据 user 当前用户 内容参考 SysUser
+ * 内置数据 user 当前用户 内容参考 LoginUser
  * 如需扩展数据 可使用 {@link com.ruoyi.common.helper.DataPermissionHelper} 操作
  * 内置服务 sdss 系统数据权限服务 内容参考 SysDataScopeService
  * 如需扩展更多自定义服务 可以参考 sdss 自行编写

+ 2 - 2
ruoyi-framework/src/main/java/com/ruoyi/framework/handler/PlusDataPermissionHandler.java

@@ -7,7 +7,7 @@ import cn.hutool.core.util.ClassUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.ruoyi.common.annotation.DataColumn;
 import com.ruoyi.common.annotation.DataPermission;
-import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.dto.RoleDTO;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.enums.DataScopeType;
 import com.ruoyi.common.exception.ServiceException;
@@ -112,7 +112,7 @@ public class PlusDataPermissionHandler {
         StandardEvaluationContext context = new StandardEvaluationContext();
         context.setBeanResolver(beanResolver);
         DataPermissionHelper.getContext().forEach(context::setVariable);
-        for (SysRole role : user.getRoles()) {
+        for (RoleDTO role : user.getRoles()) {
             user.setRoleId(role.getRoleId());
             // 获取角色权限泛型
             DataScopeType type = DataScopeType.findCode(role.getDataScope());

+ 1 - 4
ruoyi-framework/src/main/java/com/ruoyi/framework/listener/UserActionListener.java

@@ -4,7 +4,6 @@ import cn.dev33.satoken.config.SaTokenConfig;
 import cn.dev33.satoken.listener.SaTokenListener;
 import cn.dev33.satoken.stp.SaLoginModel;
 import cn.dev33.satoken.stp.StpUtil;
-import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.http.useragent.UserAgent;
 import cn.hutool.http.useragent.UserAgentUtil;
 import com.ruoyi.common.constant.Constants;
@@ -52,10 +51,8 @@ public class UserActionListener implements SaTokenListener {
                 .loginTime(System.currentTimeMillis())
                 .tokenId(tokenValue)
                 .userName(user.getUsername())
+                .deptName(user.getDeptName())
                 .build();
-            if (ObjectUtil.isNotNull(user.getDept())) {
-                dto.setDeptName(user.getDept().getDeptName());
-            }
             RedisUtils.setCacheObject(Constants.ONLINE_TOKEN_KEY + tokenValue, dto, tokenConfig.getTimeout(), TimeUnit.SECONDS);
             log.info("user doLogin, useId:{}, token:{}", loginId, tokenValue);
         } else if (userType == UserType.APP_USER) {

+ 10 - 3
ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java

@@ -1,8 +1,10 @@
 package com.ruoyi.system.service;
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.dto.RoleDTO;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.core.service.LogininforService;
@@ -12,13 +14,17 @@ import com.ruoyi.common.exception.user.CaptchaException;
 import com.ruoyi.common.exception.user.CaptchaExpireException;
 import com.ruoyi.common.exception.user.UserException;
 import com.ruoyi.common.helper.LoginHelper;
-import com.ruoyi.common.utils.*;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.MessageUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.common.utils.redis.RedisUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -137,8 +143,9 @@ public class SysLoginService {
         loginUser.setUserType(user.getUserType());
         loginUser.setMenuPermission(permissionService.getMenuPermission(user));
         loginUser.setRolePermission(permissionService.getRolePermission(user));
-        loginUser.setRoles(user.getRoles());
-        loginUser.setDept(user.getDept());
+        loginUser.setDeptName(user.getDept().getDeptName());
+        List<RoleDTO> roles = BeanUtil.copyToList(user.getRoles(), RoleDTO.class);
+        loginUser.setRoles(roles);
         return loginUser;
     }