update 数据库更改 对接多用户体系

This commit is contained in:
疯狂的狮子li 2022-01-17 17:09:27 +08:00
parent 3600875707
commit 911867d5a5
11 changed files with 93 additions and 47 deletions

View File

@ -64,6 +64,12 @@ public class SysUser extends BaseEntity {
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
private String nickName; private String nickName;
/**
* 用户类型sys_user系统用户
*/
@ApiModelProperty(value = "用户类型")
private String userType;
/** /**
* 用户邮箱 * 用户邮箱
*/ */

View File

@ -1,5 +1,6 @@
package com.ruoyi.common.core.domain.model; package com.ruoyi.common.core.domain.model;
import com.ruoyi.common.helper.LoginHelper;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@ -85,8 +86,11 @@ public class LoginUser implements Serializable {
*/ */
private String username; private String username;
/**
* 获取登录id
*/
public String getLoginId() { public String getLoginId() {
return userType + userId; return userType + LoginHelper.JOIN_CODE + userId;
} }
} }

View File

@ -1,13 +1,23 @@
package com.ruoyi.common.core.domain.model; package com.ruoyi.common.core.domain.model;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/** /**
* 用户注册对象 * 用户注册对象
* *
* @author Lion Li * @author Lion Li
*/ */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel("用户注册对象") @ApiModel("用户注册对象")
public class RegisterBody extends LoginBody { public class RegisterBody extends LoginBody {
@ApiModelProperty(value = "用户类型")
private String userType;
} }

View File

@ -1,13 +1,12 @@
package com.ruoyi.common.enums; package com.ruoyi.common.enums;
import com.ruoyi.common.exception.UtilException;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
/** /**
* 设备类型 * 设备类型
* 针对 用户体系 * 针对 用户体系
* *
* @author Lion Li * @author Lion Li
*/ */
@ -18,12 +17,12 @@ public enum UserType {
/** /**
* pc端 * pc端
*/ */
SYS_USER("sys_user:"), SYS_USER("sys_user"),
/** /**
* app端 * app端
*/ */
APP_USER("app_user:"); APP_USER("app_user");
private final String userType; private final String userType;

View File

@ -19,7 +19,9 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor(access = AccessLevel.PRIVATE)
public class LoginHelper { public class LoginHelper {
private static final String LOGIN_USER_KEY = "loginUser"; public static final String JOIN_CODE = ":";
public static final String LOGIN_USER_KEY = "loginUser";
private static final ThreadLocal<LoginUser> LOGIN_CACHE = new ThreadLocal<>(); private static final ThreadLocal<LoginUser> LOGIN_CACHE = new ThreadLocal<>();
/** /**
@ -80,7 +82,9 @@ public class LoginHelper {
String userId = null; String userId = null;
for (UserType value : UserType.values()) { for (UserType value : UserType.values()) {
if (StringUtils.contains(loginId, value.getUserType())) { if (StringUtils.contains(loginId, value.getUserType())) {
userId = StringUtils.replace(loginId, value.getUserType(), StringUtils.EMPTY); String[] strs = StringUtils.split(loginId, JOIN_CODE);
// 用户id在总是在最后
userId = strs[strs.length - 1];
} }
} }
if (StringUtils.isBlank(userId)) { if (StringUtils.isBlank(userId)) {

View File

@ -8,7 +8,6 @@ import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.service.LogininforService; import com.ruoyi.common.core.service.LogininforService;
import com.ruoyi.common.enums.DeviceType; import com.ruoyi.common.enums.DeviceType;
import com.ruoyi.common.enums.UserStatus; import com.ruoyi.common.enums.UserStatus;
import com.ruoyi.common.enums.UserType;
import com.ruoyi.common.exception.user.CaptchaException; import com.ruoyi.common.exception.user.CaptchaException;
import com.ruoyi.common.exception.user.CaptchaExpireException; import com.ruoyi.common.exception.user.CaptchaExpireException;
import com.ruoyi.common.exception.user.UserException; import com.ruoyi.common.exception.user.UserException;
@ -61,17 +60,8 @@ public class SysLoginService {
throw new UserException("user.password.retry.limit.exceed", Constants.LOGIN_ERROR_LIMIT_TIME); throw new UserException("user.password.retry.limit.exceed", Constants.LOGIN_ERROR_LIMIT_TIME);
} }
SysUser user = userService.selectUserByUserName(username); SysUser user = loadUserByUsername(username);
if (StringUtils.isNull(user)) {
log.info("登录用户:{} 不存在.", username);
throw new UserException("user.not.exists", username);
} else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
log.info("登录用户:{} 已被删除.", username);
throw new UserException("user.password.delete", username);
} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
log.info("登录用户:{} 已被停用.", username);
throw new UserException("user.blocked", username);
}
if (!SecurityUtils.matchesPassword(password, user.getPassword())) { if (!SecurityUtils.matchesPassword(password, user.getPassword())) {
// 是否第一次 // 是否第一次
errorNumber = ObjectUtil.isNull(errorNumber) ? 1 : errorNumber + 1; errorNumber = ObjectUtil.isNull(errorNumber) ? 1 : errorNumber + 1;
@ -93,13 +83,7 @@ public class SysLoginService {
asyncService.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"), request); asyncService.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"), request);
recordLoginInfo(user.getUserId(), username); recordLoginInfo(user.getUserId(), username);
LoginUser loginUser = new LoginUser(); LoginUser loginUser = buildLoginUser(user);
loginUser.setUserId(user.getUserId());
loginUser.setDeptId(user.getDeptId());
loginUser.setUsername(user.getUserName());
loginUser.setUserType(UserType.SYS_USER.getUserType());
loginUser.setMenuPermission(permissionService.getMenuPermission(user));
loginUser.setRolePermission(permissionService.getRolePermission(user));
// 生成token // 生成token
LoginHelper.loginByDevice(loginUser, DeviceType.PC); LoginHelper.loginByDevice(loginUser, DeviceType.PC);
@ -127,6 +111,35 @@ public class SysLoginService {
} }
} }
private SysUser loadUserByUsername(String username) {
SysUser user = userService.selectUserByUserName(username);
if (StringUtils.isNull(user)) {
log.info("登录用户:{} 不存在.", username);
throw new UserException("user.not.exists", username);
} else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
log.info("登录用户:{} 已被删除.", username);
throw new UserException("user.password.delete", username);
} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
log.info("登录用户:{} 已被停用.", username);
throw new UserException("user.blocked", username);
}
return user;
}
/**
* 构建登录用户
*/
private LoginUser buildLoginUser(SysUser user) {
LoginUser loginUser = new LoginUser();
loginUser.setUserId(user.getUserId());
loginUser.setDeptId(user.getDeptId());
loginUser.setUsername(user.getUserName());
loginUser.setUserType(user.getUserType());
loginUser.setMenuPermission(permissionService.getMenuPermission(user));
loginUser.setRolePermission(permissionService.getRolePermission(user));
return loginUser;
}
/** /**
* 记录登录信息 * 记录登录信息
* *

View File

@ -5,6 +5,7 @@ import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.RegisterBody; import com.ruoyi.common.core.domain.model.RegisterBody;
import com.ruoyi.common.core.service.LogininforService; import com.ruoyi.common.core.service.LogininforService;
import com.ruoyi.common.enums.UserType;
import com.ruoyi.common.exception.user.CaptchaException; import com.ruoyi.common.exception.user.CaptchaException;
import com.ruoyi.common.exception.user.CaptchaExpireException; import com.ruoyi.common.exception.user.CaptchaExpireException;
import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.MessageUtils;
@ -32,7 +33,11 @@ public class SysRegisterService {
* 注册 * 注册
*/ */
public String register(RegisterBody registerBody) { public String register(RegisterBody registerBody) {
String msg = "", username = registerBody.getUsername(), password = registerBody.getPassword(); String msg = "";
String username = registerBody.getUsername();
String password = registerBody.getPassword();
// 校验用户类型是否存在
String userType = UserType.getUserType(registerBody.getUserType()).getUserType();
boolean captchaOnOff = configService.selectCaptchaOnOff(); boolean captchaOnOff = configService.selectCaptchaOnOff();
// 验证码开关 // 验证码开关
@ -57,6 +62,7 @@ public class SysRegisterService {
sysUser.setUserName(username); sysUser.setUserName(username);
sysUser.setNickName(username); sysUser.setNickName(username);
sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword())); sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword()));
sysUser.setUserType(userType);
boolean regFlag = userService.registerUser(sysUser); boolean regFlag = userService.registerUser(sysUser);
if (!regFlag) { if (!regFlag) {
msg = "注册失败,请联系系统管理人员"; msg = "注册失败,请联系系统管理人员";

View File

@ -9,6 +9,7 @@
<result property="deptId" column="dept_id"/> <result property="deptId" column="dept_id"/>
<result property="userName" column="user_name"/> <result property="userName" column="user_name"/>
<result property="nickName" column="nick_name"/> <result property="nickName" column="nick_name"/>
<result property="userType" column="user_type"/>
<result property="email" column="email"/> <result property="email" column="email"/>
<result property="phonenumber" column="phonenumber"/> <result property="phonenumber" column="phonenumber"/>
<result property="sex" column="sex"/> <result property="sex" column="sex"/>
@ -50,6 +51,7 @@
u.dept_id, u.dept_id,
u.user_name, u.user_name,
u.nick_name, u.nick_name,
u.user_type,
u.email, u.email,
u.avatar, u.avatar,
u.phonenumber, u.phonenumber,

View File

@ -124,7 +124,9 @@ export default {
this.$refs.registerForm.validate(valid => { this.$refs.registerForm.validate(valid => {
if (valid) { if (valid) {
this.loading = true; this.loading = true;
register(this.registerForm).then(res => { let registerForm = this.registerForm;
registerForm.userType = "sys_user"
register(registerForm).then(res => {
const username = this.registerForm.username; const username = this.registerForm.username;
this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', { this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', {
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,

View File

@ -44,7 +44,7 @@ create table sys_user (
dept_id bigint(20) default null comment '部门ID', dept_id bigint(20) default null comment '部门ID',
user_name varchar(30) not null comment '用户账号', user_name varchar(30) not null comment '用户账号',
nick_name varchar(30) not null comment '用户昵称', nick_name varchar(30) not null comment '用户昵称',
user_type varchar(2) default '00' comment '用户类型00系统用户)', user_type varchar(10) default 'sys_user' comment '用户类型sys_user系统用户)',
email varchar(50) default '' comment '用户邮箱', email varchar(50) default '' comment '用户邮箱',
phonenumber varchar(11) default '' comment '手机号码', phonenumber varchar(11) default '' comment '手机号码',
sex char(1) default '0' comment '用户性别0男 1女 2未知', sex char(1) default '0' comment '用户性别0男 1女 2未知',
@ -65,8 +65,8 @@ create table sys_user (
-- ---------------------------- -- ----------------------------
-- 初始化-用户信息表数据 -- 初始化-用户信息表数据
-- ---------------------------- -- ----------------------------
insert into sys_user values(1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '管理员'); insert into sys_user values(1, 103, 'admin', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '管理员');
insert into sys_user values(2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员'); insert into sys_user values(2, 105, 'lionli', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员');
-- ---------------------------- -- ----------------------------

View File

@ -33,6 +33,9 @@ CREATE TABLE test_tree
PRIMARY KEY (id) USING BTREE PRIMARY KEY (id) USING BTREE
) ENGINE = InnoDB COMMENT = '测试树表'; ) ENGINE = InnoDB COMMENT = '测试树表';
INSERT INTO sys_user(user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark) VALUES (3, 108, 'test', '本部门及以下 密码666', 'sys_user', '', '', '0', '', '$2a$10$M6tZRpUZbWKq11O/z6YISePQc./Jhru8E18mmVJTr9aV8whzfjacC', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), 'test', sysdate(), NULL);
INSERT INTO sys_user(user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark) VALUES (4, 102, 'test1', '仅本人 密码666', 'sys_user', '', '', '0', '', '$2a$10$yBSXp5Ba1m402cxXTPSy4eXUO8CXCGvXfquNVP/XMWwZ8nf9GaoMy', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), 'test1', sysdate(), NULL);
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (5, '测试菜单', 0, 5, 'demo', NULL, 1, 0, 'M', '0', '0', NULL, 'star', 'admin', '2021-05-30 00:34:26', NULL, NULL, ''); INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (5, '测试菜单', 0, 5, 'demo', NULL, 1, 0, 'M', '0', '0', NULL, 'star', 'admin', '2021-05-30 00:34:26', NULL, NULL, '');
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1500, '测试单表', 5, 1, 'demo', 'demo/demo/index', 1, 0, 'C', '0', '0', 'demo:demo:list', '#', 'admin', '2021-05-30 00:39:23', '', NULL, '测试单表菜单'); INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) VALUES (1500, '测试单表', 5, 1, 'demo', 'demo/demo/index', 1, 0, 'C', '0', '0', 'demo:demo:list', '#', 'admin', '2021-05-30 00:39:23', '', NULL, '测试单表菜单');
@ -136,9 +139,6 @@ INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1509);
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1510); INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1510);
INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1511); INSERT INTO sys_role_menu(role_id, menu_id) VALUES (4, 1511);
INSERT INTO sys_user(user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark) VALUES (3, 108, 'test', '本部门及以下 密码666', '00', '', '', '0', '', '$2a$10$M6tZRpUZbWKq11O/z6YISePQc./Jhru8E18mmVJTr9aV8whzfjacC', '0', '0', '127.0.0.1', '2021-05-30 02:00:37', 'admin', '2021-04-22 09:50:41', 'test', '2021-05-30 02:00:37', NULL);
INSERT INTO sys_user(user_id, dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status, del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark) VALUES (4, 102, 'test1', '仅本人 密码666', '00', '', '', '0', '', '$2a$10$yBSXp5Ba1m402cxXTPSy4eXUO8CXCGvXfquNVP/XMWwZ8nf9GaoMy', '0', '0', '127.0.0.1', '2021-05-30 01:48:03', 'admin', '2021-05-30 01:16:02', 'test1', '2021-05-30 01:48:03', NULL);
INSERT INTO sys_user_role(user_id, role_id) VALUES (3, 3); INSERT INTO sys_user_role(user_id, role_id) VALUES (3, 3);
INSERT INTO sys_user_role(user_id, role_id) VALUES (4, 4); INSERT INTO sys_user_role(user_id, role_id) VALUES (4, 4);