update 解耦 LoginUser 与 SysUser 强关联

This commit is contained in:
疯狂的狮子Li 2021-11-21 01:39:43 +08:00
parent 321bb010cb
commit 019526fbe9
12 changed files with 88 additions and 37 deletions

View File

@ -53,7 +53,7 @@ public class SysUserOnlineController extends BaseController {
if (StringUtils.equals(ipaddr, user.getIpaddr())) { if (StringUtils.equals(ipaddr, user.getIpaddr())) {
userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); 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())) { if (StringUtils.equals(userName, user.getUsername())) {
userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
} }

View File

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

View File

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

View File

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

View File

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

View File

@ -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);
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -47,6 +47,6 @@ public class UserDetailsServiceImpl implements UserDetailsService {
} }
public UserDetails createLoginUser(SysUser user) { 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));
} }
} }