注册功能方案

lishihuan大约 5 分钟

注册功能方案

我来帮你设计注册功能的数据库方案。先让我查看一下现有的 sys_user 表结构:

完美!现在我已经了解了现有的 sys_user 表结构。让我为你设计一个完整的注册功能方案:

注册功能数据库设计方案

方案概述

基于你的需求,我建议采用扩展现有 sys_user 表 + 新增审核表的方式,具体如下:


1️⃣ 修改 sys_user

在现有表基础上添加以下字段:

-- 用户注册相关字段扩展
ALTER TABLE `sys_user` 
ADD COLUMN `account_type` char(1) DEFAULT '0' COMMENT '账号类型(0=系统账号 1=正式账号 2=临时账号)' AFTER `user_type`,
ADD COLUMN `real_name` varchar(50) DEFAULT NULL COMMENT '真实姓名(实名认证用)' AFTER `user_name`,
ADD COLUMN `id_card` varchar(18) DEFAULT NULL COMMENT '身份证号(实名认证用)' AFTER `real_name`,
ADD COLUMN `id_card_front` varchar(255) DEFAULT NULL COMMENT '身份证正面照片' AFTER `id_card`,
ADD COLUMN `id_card_back` varchar(255) DEFAULT NULL COMMENT '身份证反面照片' AFTER `id_card_front`,
ADD COLUMN `audit_status` char(1) DEFAULT '0' COMMENT '审核状态(0=待审核 1=审核通过 2=审核拒绝)' AFTER `status`,
ADD COLUMN `audit_time` datetime DEFAULT NULL COMMENT '审核时间' AFTER `audit_status`,
ADD COLUMN `audit_by` varchar(64) DEFAULT NULL COMMENT '审核人' AFTER `audit_time`,
ADD COLUMN `audit_remark` varchar(500) DEFAULT NULL COMMENT '审核备注' AFTER `audit_by`,
ADD COLUMN `register_source` varchar(20) DEFAULT 'web' COMMENT '注册来源(web/app/wechat等)' AFTER `audit_remark`,
ADD COLUMN `temp_expire_time` datetime DEFAULT NULL COMMENT '临时账号过期时间' AFTER `register_source`,
ADD INDEX `idx_account_type` (`account_type`),
ADD INDEX `idx_audit_status` (`audit_status`),
ADD INDEX `idx_id_card` (`id_card`);

2️⃣ 新增字典配置

sys_dict_data 表中添加相关字典:

-- 账号类型字典
INSERT INTO `sys_dict_data` VALUES (NULL, 1, '系统账号', '0', 'sys_account_type', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '系统内部创建的账号');
INSERT INTO `sys_dict_data` VALUES (NULL, 2, '正式账号', '1', 'sys_account_type', '', '', 'N', '0', 'admin', NOW(), '', NULL, '实名认证注册的正式账号');
INSERT INTO `sys_dict_data` VALUES (NULL, 3, '临时账号', '2', 'sys_account_type', '', '', 'N', '0', 'admin', NOW(), '', NULL, '临时注册账号,仅可写信');

-- 审核状态字典
INSERT INTO `sys_dict_data` VALUES (NULL, 1, '待审核', '0', 'sys_audit_status', '', 'info', 'Y', '0', 'admin', NOW(), '', NULL, '等待审核');
INSERT INTO `sys_dict_data` VALUES (NULL, 2, '审核通过', '1', 'sys_audit_status', '', 'success', 'N', '0', 'admin', NOW(), '', NULL, '审核通过');
INSERT INTO `sys_dict_data` VALUES (NULL, 3, '审核拒绝', '2', 'sys_audit_status', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '审核拒绝');

-- 字典类型
INSERT INTO `sys_dict_type` VALUES (NULL, '账号类型', 'sys_account_type', '0', 'admin', NOW(), '', NULL, '用户账号类型列表');
INSERT INTO `sys_dict_type` VALUES (NULL, '审核状态', 'sys_audit_status', '0', 'admin', NOW(), '', NULL, '用户审核状态列表');

3️⃣ 新增审核记录表(可选,用于审核历史追溯)

-- 用户审核记录表
DROP TABLE IF EXISTS `sys_user_audit`;
CREATE TABLE `sys_user_audit` (
  `audit_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '审核ID',
  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
  `audit_type` char(1) DEFAULT '1' COMMENT '审核类型(1=注册审核 2=信息变更审核)',
  `audit_status` char(1) DEFAULT '0' COMMENT '审核状态(0=待审核 1=通过 2=拒绝)',
  `audit_content` text COMMENT '审核内容(JSON格式存储提交的认证信息)',
  `audit_remark` varchar(500) DEFAULT NULL COMMENT '审核备注',
  `audit_by` varchar(64) DEFAULT NULL COMMENT '审核人',
  `audit_time` datetime DEFAULT NULL COMMENT '审核时间',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`audit_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_audit_status` (`audit_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='用户审核记录表';

4️⃣ 权限控制设计

临时账号权限配置

创建一个专门的"临时用户"角色,只有写信权限:

-- 临时用户角色
INSERT INTO `sys_role` VALUES (NULL, '临时用户', 'temp_user', 3, '1', '1', '0', '0', 'admin', NOW(), '', NULL, '临时注册用户,仅可写信');

-- 临时用户菜单权限(仅首长信箱写信功能)
-- 需要根据你的菜单ID配置,示例:
INSERT INTO `sys_role_menu` VALUES (角色ID, 信箱菜单ID);

正式账号权限配置

正式账号审核通过后,可以分配更多权限,根据业务需求配置。


5️⃣ 业务逻辑设计

注册流程

┌─────────────────┐
│  用户选择注册类型  │
└────────┬────────┘
         │
    ┌────┴────┐
    │         │
┌───▼──┐  ┌──▼────┐
│临时注册│  │实名注册│
└───┬──┘  └──┬────┘
    │         │
    │    ┌────▼─────────────┐
    │    │填写真实姓名+身份证 │
    │    │上传身份证照片      │
    │    └────┬─────────────┘
    │         │
    │    ┌────▼─────────────┐
    │    │account_type = 1  │
    │    │audit_status = 0  │
    │    │等待管理员审核     │
    │    └────┬─────────────┘
    │         │
    │    ┌────▼─────────────┐
    │    │审核通过后         │
    │    │audit_status = 1  │
    │    │分配正式角色权限   │
    │    └──────────────────┘
    │
┌───▼──────────────┐
│account_type = 2  │
│直接注册成功       │
│分配临时角色权限   │
│设置过期时间(可选) │
└──────────────────┘

6️⃣ 核心代码示例

User 实体类扩展

/** 账号类型(0=系统账号 1=正式账号 2=临时账号) */
@Excel(name = "账号类型", readConverterExp = "0=系统账号,1=正式账号,2=临时账号")
private String accountType;

/** 真实姓名 */
private String realName;

/** 身份证号 */
private String idCard;

/** 身份证正面照片 */
private String idCardFront;

/** 身份证反面照片 */
private String idCardBack;

/** 审核状态(0=待审核 1=审核通过 2=审核拒绝) */
@Excel(name = "审核状态", readConverterExp = "0=待审核,1=审核通过,2=审核拒绝")
private String auditStatus;

/** 审核时间 */
private Date auditTime;

/** 审核人 */
private String auditBy;

/** 审核备注 */
private String auditRemark;

/** 注册来源 */
private String registerSource;

/** 临时账号过期时间 */
private Date tempExpireTime;

注册接口示例

/**
 * 用户注册
 */
@PostMapping("/register")
public AjaxResult register(@RequestBody User user) {
    // 1. 校验用户名是否存在
    if (userService.checkLoginNameUnique(user.getLoginName())) {
        return error("注册失败,登录账号已存在");
    }
    
    // 2. 根据注册类型处理
    if ("2".equals(user.getAccountType())) {
        // 临时账号注册
        user.setAuditStatus("1"); // 无需审核,直接通过
        user.setStatus("0"); // 正常状态
        // 设置过期时间(例如30天后)
        user.setTempExpireTime(DateUtils.addDays(new Date(), 30));
        // 分配临时用户角色
        user.setRoleIds(new Long[]{临时角色ID});
    } else if ("1".equals(user.getAccountType())) {
        // 正式账号注册(实名认证)
        // 校验身份证信息
        if (StringUtils.isEmpty(user.getRealName()) || 
            StringUtils.isEmpty(user.getIdCard())) {
            return error("实名认证信息不完整");
        }
        user.setAuditStatus("0"); // 待审核
        user.setStatus("1"); // 停用状态,审核通过后启用
    }
    
    // 3. 保存用户
    user.setRegisterSource("web");
    return toAjax(userService.insertUser(user));
}

7️⃣ 优势总结

特性说明
扩展性强基于现有表扩展,不破坏原有系统
权限隔离临时账号和正式账号权限完全分离
审核流程实名认证需要审核,临时账号直接通过
数据完整保留审核历史,便于追溯
安全可控临时账号可设置过期时间,定期清理

8️⃣ 后续建议

  1. 定时任务:清理过期的临时账号
  2. 短信验证:注册时增加手机号验证
  3. 实名认证:对接第三方身份证验证接口(如阿里云、腾讯云)
  4. 审核工作台:为管理员提供专门的审核界面
  5. 权限细化:根据业务需求进一步细化临时账号和正式账号的权限

需要我帮你生成完整的 SQL 脚本或者实现具体的代码吗?