Ver código fonte

update 解耦 LoginUser 与 SysUser 强关联

疯狂的狮子Li 3 anos atrás
pai
commit
019526fbe9

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java

@@ -53,7 +53,7 @@ public class SysUserOnlineController extends BaseController {
                 if (StringUtils.equals(ipaddr, user.getIpaddr())) {
                     userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
                 }
-            } else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) {
+            } else if (StringUtils.isNotEmpty(userName)) {
                 if (StringUtils.equals(userName, user.getUsername())) {
                     userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
                 }

+ 3 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -8,6 +8,7 @@ import com.ruoyi.common.core.domain.model.LoginBody;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.system.domain.vo.RouterVo;
 import com.ruoyi.system.service.ISysMenuService;
+import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.SysLoginService;
 import com.ruoyi.system.service.SysPermissionService;
 import io.swagger.annotations.Api;
@@ -38,6 +39,7 @@ public class SysLoginController {
 
     private final SysLoginService loginService;
     private final ISysMenuService menuService;
+    private final ISysUserService userService;
     private final SysPermissionService permissionService;
 
     /**
@@ -65,7 +67,7 @@ public class SysLoginController {
     @ApiOperation("获取用户信息")
     @GetMapping("getInfo")
     public AjaxResult<Map<String, Object>> getInfo() {
-        SysUser user = SecurityUtils.getLoginUser().getUser();
+        SysUser user = userService.selectUserById(SecurityUtils.getUserId());
         // 角色集合
         Set<String> roles = permissionService.getRolePermission(user);
         // 权限集合

+ 3 - 12
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java

@@ -47,7 +47,7 @@ public class SysProfileController extends BaseController {
     @GetMapping
     public AjaxResult<Map<String, Object>> profile() {
         LoginUser loginUser = getLoginUser();
-        SysUser user = loginUser.getUser();
+        SysUser user = userService.selectUserById(loginUser.getUserId());
         Map<String, Object> ajax = new HashMap<>();
         ajax.put("user", user);
         ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
@@ -71,16 +71,10 @@ public class SysProfileController extends BaseController {
             return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
         }
         LoginUser loginUser = getLoginUser();
-        SysUser sysUser = loginUser.getUser();
+        SysUser sysUser = userService.selectUserById(loginUser.getUserId());
         user.setUserId(sysUser.getUserId());
         user.setPassword(null);
         if (userService.updateUserProfile(user) > 0) {
-            // 更新缓存用户信息
-            sysUser.setNickName(user.getNickName());
-            sysUser.setPhonenumber(user.getPhonenumber());
-            sysUser.setEmail(user.getEmail());
-            sysUser.setSex(user.getSex());
-            tokenService.setLoginUser(loginUser);
             return AjaxResult.success();
         }
         return AjaxResult.error("修改个人信息异常,请联系管理员");
@@ -108,7 +102,7 @@ public class SysProfileController extends BaseController {
         }
         if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) {
             // 更新缓存用户密码
-            loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
+            loginUser.setPassword(SecurityUtils.encryptPassword(newPassword));
             tokenService.setLoginUser(loginUser);
             return AjaxResult.success();
         }
@@ -132,9 +126,6 @@ public class SysProfileController extends BaseController {
             String avatar = oss.getUrl();
             if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) {
                 ajax.put("imgUrl", avatar);
-                // 更新缓存用户头像
-                loginUser.getUser().setAvatar(avatar);
-                tokenService.setLoginUser(loginUser);
                 return AjaxResult.success(ajax);
             }
         }

+ 3 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java

@@ -105,9 +105,9 @@ public class SysRoleController extends BaseController {
         if (roleService.updateRole(role) > 0) {
             // 更新缓存用户权限
             LoginUser loginUser = getLoginUser();
-            if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) {
-                loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
-                loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
+            SysUser sysUser = userService.selectUserById(loginUser.getUserId());
+            if (StringUtils.isNotNull(sysUser) && !sysUser.isAdmin()) {
+                loginUser.setPermissions(permissionService.getMenuPermission(sysUser));
                 tokenService.setLoginUser(loginUser);
             }
             return AjaxResult.success();

+ 15 - 9
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.fasterxml.jackson.annotation.JsonIgnore;
-import com.ruoyi.common.core.domain.entity.SysUser;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -75,31 +74,38 @@ public class LoginUser implements UserDetails {
     private Set<String> permissions;
 
     /**
-     * 用户信息
+     * 用户
      */
-    private SysUser user;
+    private String username;
 
-    public LoginUser(SysUser user, Set<String> permissions) {
-        this.user = user;
+    /**
+     * 密码
+     */
+    private String password;
+
+    public LoginUser(String username, String password, Set<String> permissions) {
+        this.username = username;
+        this.password = password;
         this.permissions = permissions;
     }
 
-    public LoginUser(Long userId, Long deptId, SysUser user, Set<String> permissions) {
+    public LoginUser(Long userId, Long deptId, String username, String password, Set<String> permissions) {
         this.userId = userId;
         this.deptId = deptId;
-        this.user = user;
+        this.username = username;
+        this.password = password;
         this.permissions = permissions;
     }
 
     @JsonIgnore
     @Override
     public String getPassword() {
-        return user.getPassword();
+        return password;
     }
 
     @Override
     public String getUsername() {
-        return user.getUserName();
+        return username;
     }
 
     /**

+ 28 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/service/UserService.java

@@ -0,0 +1,28 @@
+package com.ruoyi.common.core.service;
+
+import com.ruoyi.common.core.domain.entity.SysUser;
+
+/**
+ * 通用 用户业务
+ *
+ * @author Lion Li
+ */
+public interface UserService {
+
+    /**
+     * 通过用户名查询用户
+     *
+     * @param userName 用户名
+     * @return 用户对象信息
+     */
+    SysUser selectUserByUserName(String userName);
+
+    /**
+     * 通过用户ID查询用户
+     *
+     * @param userId 用户ID
+     * @return 用户对象信息
+     */
+    SysUser selectUserById(Long userId);
+
+}

+ 4 - 2
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java

@@ -5,9 +5,11 @@ import com.ruoyi.common.core.domain.BaseEntity;
 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.service.UserService;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.reflect.ReflectUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
@@ -64,8 +66,8 @@ public class DataScopeAspect {
 		// 获取当前的用户
 		LoginUser loginUser = SecurityUtils.getLoginUser();
 		if (StringUtils.isNotNull(loginUser)) {
-			SysUser currentUser = loginUser.getUser();
-			// 如果是超级管理员,则不过滤数据
+			SysUser currentUser = SpringUtils.getBean(UserService.class).selectUserById(loginUser.getUserId());
+            // 如果是超级管理员,则不过滤数据
 			if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) {
 				dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
 					controllerDataScope.userAlias(), controllerDataScope.isUser());

+ 4 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -3,6 +3,7 @@ package com.ruoyi.system.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.service.UserService;
 
 import java.util.List;
 
@@ -11,7 +12,7 @@ import java.util.List;
  *
  * @author Lion Li
  */
-public interface ISysUserService extends IService<SysUser> {
+public interface ISysUserService extends IService<SysUser>, UserService {
 
 
     TableDataInfo<SysUser> selectPageUserList(SysUser user);
@@ -46,6 +47,7 @@ public interface ISysUserService extends IService<SysUser> {
      * @param userName 用户名
      * @return 用户对象信息
      */
+    @Override
     SysUser selectUserByUserName(String userName);
 
     /**
@@ -54,6 +56,7 @@ public interface ISysUserService extends IService<SysUser> {
      * @param userId 用户ID
      * @return 用户对象信息
      */
+    @Override
     SysUser selectUserById(Long userId);
 
     /**

+ 14 - 3
ruoyi-system/src/main/java/com/ruoyi/system/service/PermissionService.java

@@ -1,9 +1,12 @@
 package com.ruoyi.system.service;
 
 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.service.UserService;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -91,10 +94,14 @@ public class PermissionService {
             return false;
         }
         LoginUser loginUser = SecurityUtils.getLoginUser();
-        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) {
+        if (StringUtils.isNull(loginUser)) {
             return false;
         }
-        for (SysRole sysRole : loginUser.getUser().getRoles()) {
+        SysUser sysUser = SpringUtils.getBean(UserService.class).selectUserById(loginUser.getUserId());
+        if (CollectionUtils.isEmpty(sysUser.getRoles())) {
+            return false;
+        }
+        for (SysRole sysRole : sysUser.getRoles()) {
             String roleKey = sysRole.getRoleKey();
             if (SUPER_ADMIN.equals(roleKey) || roleKey.equals(StringUtils.trim(role))) {
                 return true;
@@ -124,7 +131,11 @@ public class PermissionService {
             return false;
         }
         LoginUser loginUser = SecurityUtils.getLoginUser();
-        if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) {
+        if (StringUtils.isNull(loginUser)) {
+            return false;
+        }
+        SysUser sysUser = SpringUtils.getBean(UserService.class).selectUserById(loginUser.getUserId());
+        if (CollectionUtils.isEmpty(sysUser.getRoles())) {
             return false;
         }
         for (String role : roles.split(ROLE_DELIMETER)) {

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

@@ -1,9 +1,12 @@
 package com.ruoyi.system.service.impl;
 
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.domain.SysUserOnline;
 import com.ruoyi.system.service.ISysUserOnlineService;
+import com.ruoyi.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -14,6 +17,9 @@ import org.springframework.stereotype.Service;
 @Service
 public class SysUserOnlineServiceImpl implements ISysUserOnlineService {
 
+    @Autowired
+    private ISysUserService userService;
+
     /**
      * 通过登录地址查询信息
      *
@@ -68,9 +74,10 @@ public class SysUserOnlineServiceImpl implements ISysUserOnlineService {
      */
     @Override
     public SysUserOnline loginUserToUserOnline(LoginUser user) {
-        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUser())) {
+        if (StringUtils.isNull(user)) {
             return null;
         }
+        SysUser sysUser = userService.selectUserById(user.getUserId());
         SysUserOnline sysUserOnline = new SysUserOnline();
         sysUserOnline.setTokenId(user.getToken());
         sysUserOnline.setUserName(user.getUsername());
@@ -79,8 +86,8 @@ public class SysUserOnlineServiceImpl implements ISysUserOnlineService {
         sysUserOnline.setBrowser(user.getBrowser());
         sysUserOnline.setOs(user.getOs());
         sysUserOnline.setLoginTime(user.getLoginTime());
-        if (StringUtils.isNotNull(user.getUser().getDept())) {
-            sysUserOnline.setDeptName(user.getUser().getDept().getDeptName());
+        if (StringUtils.isNotNull(sysUser.getDept())) {
+            sysUserOnline.setDeptName(sysUser.getDept().getDeptName());
         }
         return sysUserOnline;
     }

+ 2 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -8,6 +8,7 @@ import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
 import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.service.UserService;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.PageUtils;
 import com.ruoyi.common.utils.SecurityUtils;
@@ -35,7 +36,7 @@ import java.util.List;
  */
 @Slf4j
 @Service
-public class SysUserServiceImpl extends ServicePlusImpl<SysUserMapper, SysUser, SysUser> implements ISysUserService {
+public class SysUserServiceImpl extends ServicePlusImpl<SysUserMapper, SysUser, SysUser> implements ISysUserService, UserService {
 
     @Autowired
     private SysRoleMapper roleMapper;

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserDetailsServiceImpl.java

@@ -47,6 +47,6 @@ public class UserDetailsServiceImpl implements UserDetailsService {
     }
 
     public UserDetails createLoginUser(SysUser user) {
-        return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
+        return new LoginUser(user.getUserId(), user.getDeptId(), user.getUserName(), user.getPassword(), permissionService.getMenuPermission(user));
     }
 }