mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	update 数据库更改 对接多用户体系
This commit is contained in:
		@@ -64,6 +64,12 @@ public class SysUser extends BaseEntity {
 | 
			
		||||
    @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
 | 
			
		||||
    private String nickName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户类型(sys_user系统用户)
 | 
			
		||||
     */
 | 
			
		||||
    @ApiModelProperty(value = "用户类型")
 | 
			
		||||
    private String userType;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户邮箱
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package com.ruoyi.common.core.domain.model;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.common.helper.LoginHelper;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.NoArgsConstructor;
 | 
			
		||||
import lombok.experimental.Accessors;
 | 
			
		||||
@@ -85,8 +86,11 @@ public class LoginUser implements Serializable {
 | 
			
		||||
     */
 | 
			
		||||
    private String username;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取登录id
 | 
			
		||||
     */
 | 
			
		||||
    public String getLoginId() {
 | 
			
		||||
        return userType + userId;
 | 
			
		||||
        return userType + LoginHelper.JOIN_CODE + userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,23 @@
 | 
			
		||||
package com.ruoyi.common.core.domain.model;
 | 
			
		||||
 | 
			
		||||
import io.swagger.annotations.ApiModel;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户注册对象
 | 
			
		||||
 *
 | 
			
		||||
 * @author Lion Li
 | 
			
		||||
 */
 | 
			
		||||
@ApiModel("用户注册对象")
 | 
			
		||||
public class RegisterBody extends LoginBody {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain.model;
 | 
			
		||||
 | 
			
		||||
import io.swagger.annotations.ApiModel;
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.experimental.Accessors;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户注册对象
 | 
			
		||||
 *
 | 
			
		||||
 * @author Lion Li
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
@EqualsAndHashCode(callSuper = true)
 | 
			
		||||
@Accessors(chain = true)
 | 
			
		||||
@ApiModel("用户注册对象")
 | 
			
		||||
public class RegisterBody extends LoginBody {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "用户类型")
 | 
			
		||||
    private String userType;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,12 @@
 | 
			
		||||
package com.ruoyi.common.enums;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.common.exception.UtilException;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 设备类型
 | 
			
		||||
 * 针对两套 用户体系
 | 
			
		||||
 * 针对多套 用户体系
 | 
			
		||||
 *
 | 
			
		||||
 * @author Lion Li
 | 
			
		||||
 */
 | 
			
		||||
@@ -18,12 +17,12 @@ public enum UserType {
 | 
			
		||||
    /**
 | 
			
		||||
     * pc端
 | 
			
		||||
     */
 | 
			
		||||
    SYS_USER("sys_user:"),
 | 
			
		||||
    SYS_USER("sys_user"),
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * app端
 | 
			
		||||
     */
 | 
			
		||||
    APP_USER("app_user:");
 | 
			
		||||
    APP_USER("app_user");
 | 
			
		||||
 | 
			
		||||
    private final String userType;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,9 @@ import lombok.NoArgsConstructor;
 | 
			
		||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
 | 
			
		||||
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<>();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -80,7 +82,9 @@ public class LoginHelper {
 | 
			
		||||
            String userId = null;
 | 
			
		||||
            for (UserType value : UserType.values()) {
 | 
			
		||||
                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)) {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,6 @@ import com.ruoyi.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.ruoyi.common.core.service.LogininforService;
 | 
			
		||||
import com.ruoyi.common.enums.DeviceType;
 | 
			
		||||
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.CaptchaExpireException;
 | 
			
		||||
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);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        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);
 | 
			
		||||
        }
 | 
			
		||||
        SysUser user = loadUserByUsername(username);
 | 
			
		||||
 | 
			
		||||
        if (!SecurityUtils.matchesPassword(password, user.getPassword())) {
 | 
			
		||||
            // 是否第一次
 | 
			
		||||
            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);
 | 
			
		||||
        recordLoginInfo(user.getUserId(), username);
 | 
			
		||||
 | 
			
		||||
        LoginUser loginUser = new LoginUser();
 | 
			
		||||
        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));
 | 
			
		||||
        LoginUser loginUser = buildLoginUser(user);
 | 
			
		||||
 | 
			
		||||
        // 生成token
 | 
			
		||||
        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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 记录登录信息
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.RegisterBody;
 | 
			
		||||
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.CaptchaExpireException;
 | 
			
		||||
import com.ruoyi.common.utils.MessageUtils;
 | 
			
		||||
@@ -32,7 +33,11 @@ public class SysRegisterService {
 | 
			
		||||
     * 注册
 | 
			
		||||
     */
 | 
			
		||||
    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();
 | 
			
		||||
        // 验证码开关
 | 
			
		||||
@@ -57,6 +62,7 @@ public class SysRegisterService {
 | 
			
		||||
            sysUser.setUserName(username);
 | 
			
		||||
            sysUser.setNickName(username);
 | 
			
		||||
            sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword()));
 | 
			
		||||
            sysUser.setUserType(userType);
 | 
			
		||||
            boolean regFlag = userService.registerUser(sysUser);
 | 
			
		||||
            if (!regFlag) {
 | 
			
		||||
                msg = "注册失败,请联系系统管理人员";
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@
 | 
			
		||||
        <result property="deptId" column="dept_id"/>
 | 
			
		||||
        <result property="userName" column="user_name"/>
 | 
			
		||||
        <result property="nickName" column="nick_name"/>
 | 
			
		||||
        <result property="userType" column="user_type"/>
 | 
			
		||||
        <result property="email" column="email"/>
 | 
			
		||||
        <result property="phonenumber" column="phonenumber"/>
 | 
			
		||||
        <result property="sex" column="sex"/>
 | 
			
		||||
@@ -50,6 +51,7 @@
 | 
			
		||||
               u.dept_id,
 | 
			
		||||
               u.user_name,
 | 
			
		||||
               u.nick_name,
 | 
			
		||||
               u.user_type,
 | 
			
		||||
               u.email,
 | 
			
		||||
               u.avatar,
 | 
			
		||||
               u.phonenumber,
 | 
			
		||||
 
 | 
			
		||||
@@ -124,7 +124,9 @@ export default {
 | 
			
		||||
      this.$refs.registerForm.validate(valid => {
 | 
			
		||||
        if (valid) {
 | 
			
		||||
          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;
 | 
			
		||||
            this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', {
 | 
			
		||||
              dangerouslyUseHTMLString: true,
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ create table sys_user (
 | 
			
		||||
  dept_id           bigint(20)      default null               comment '部门ID',
 | 
			
		||||
  user_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 '用户邮箱',
 | 
			
		||||
  phonenumber       varchar(11)     default ''                 comment '手机号码',
 | 
			
		||||
  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(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(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, 'lionli', '疯狂的狮子Li', 'sys_user', 'crazyLionLi@163.com',  '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '测试员');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- ----------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,9 @@ CREATE TABLE test_tree
 | 
			
		||||
    PRIMARY KEY (id) USING BTREE
 | 
			
		||||
) 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 (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, 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 (4, 4);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user