You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设计支持主用户切换子用户账号的数据库结构

主用户可切换子用户账号的数据库设计方案

核心表结构设计

1. 用户表(users)

存储所有用户的基础信息,主用户(管理员/经理)和子用户(员工)共用一张表,通过角色区分:

CREATE TABLE users (
    user_id INT PRIMARY KEY AUTO_INCREMENT, -- 分布式场景可改用UUID作为主键
    username VARCHAR(50) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    role ENUM('admin', 'manager', 'employee') NOT NULL,
    status ENUM('active', 'inactive') DEFAULT 'active',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

2. 用户从属关系表(user_relations)

维护主用户与子用户的关联关系,支持一对多或多级从属结构:

CREATE TABLE user_relations (
    relation_id INT PRIMARY KEY AUTO_INCREMENT,
    parent_user_id INT NOT NULL,
    child_user_id INT NOT NULL,
    relation_type ENUM('direct', 'indirect') DEFAULT 'direct', -- 可选,区分直接/间接下属
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (parent_user_id) REFERENCES users(user_id),
    FOREIGN KEY (child_user_id) REFERENCES users(user_id),
    UNIQUE KEY unique_parent_child (parent_user_id, child_user_id) -- 避免重复关联
);

3. 会话切换日志表(user_session_switches)【可选】

记录主用户切换子用户的操作轨迹,用于审计和问题回溯:

CREATE TABLE user_session_switches (
    switch_id INT PRIMARY KEY AUTO_INCREMENT,
    original_user_id INT NOT NULL,
    target_user_id INT NOT NULL,
    switch_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    ip_address VARCHAR(45),
    user_agent TEXT,
    FOREIGN KEY (original_user_id) REFERENCES users(user_id),
    FOREIGN KEY (target_user_id) REFERENCES users(user_id)
);

关键业务逻辑实现

  • 登录验证:主用户通过users表验证账号密码,确认角色为admin或manager后,在会话中存储original_user_id(自身ID)和current_user_id(初始为自身ID)。
  • 获取可切换列表:查询user_relations表,以当前original_user_id为parent_user_id,关联users表获取所有下属子用户的基础信息(如用户名、ID)。
  • 切换账号:
    1. 校验目标子用户与当前主用户是否存在从属关系(通过user_relations表查询);
    2. 若开启日志功能,向user_session_switches插入切换记录;
    3. 更新会话中的current_user_id为目标子用户ID,后续业务接口均基于current_user_id返回对应数据。
  • 切换回主账号:直接将会话中的current_user_id重置为original_user_id即可。

扩展优化建议

  • 精细化权限:若需控制主用户对不同子用户的操作权限,可在user_relations表中新增permissions字段(JSON类型),存储该主用户可操作此子用户的功能模块(如{"view_dashboard": true, "edit_data": false})。
  • 多级从属支持:如果业务需要多级管理(如管理员→经理→主管→员工),可通过递归查询user_relations表获取主用户的所有下属,或新增level字段标记从属层级。
  • 数据隔离:所有业务数据表(如订单、报表)需新增user_id字段,查询时根据会话中的current_user_id或主用户关联的子用户ID集合过滤数据,确保数据访问隔离。

内容的提问来源于stack exchange,提问作者brokefacebaby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:15:50