升鲜宝 SaaS 平台后台数据库结构(含菜单/权限)最终版(MySQL)

升鲜宝 SaaS 平台后台数据库结构(含菜单/权限)最终版(MySQL)

作用:给 SaaS 平台运营后台(saas-admin) 使用
范围:账号/角色/权限/菜单/数据权限/操作审计/字典/参数/多端路由
数据库:saas_master_db(平台主库)
约定:

  • id BIGINT(你们用 LoveInWayIdGenerator 即可)

  • enabled:1启用 0禁用

  • del_flag:0正常 1删除(软删)

  • version:乐观锁

  • create_date / update_date:毫Hook时间戳(BIGINT)

  • 所有表带 COMMENT + 索引


1. 权限模型说明(RBAC + 菜单权限 + 数据权限)

  • 用户 sys_user ←→ 角色 sys_role(多对多)

  • 角色 sys_role ←→ 权限 sys_permission(多对多)

  • 菜单 sys_menu:用于渲染后台路由(Vue3)与按钮权限挂载

  • 权限 sys_permission:可绑定到菜单(menu_id),也可独立做 API 权限

  • 数据权限 sys_role_data_scope:控制“可见租户范围/分片范围/模块范围”等


2. DDL(完整建表脚本)

你可以直接整段执行(建议按顺序建表)。
字符集:utf8mb4


2.1 用户与组织

2.1.1 sys_user(平台用户)

 
CREATE TABLE sys_user ( id BIGINT PRIMARY KEY COMMENT '主键ID', user_code VARCHAR(64) NOT NULL COMMENT '账号/工号/登录名', user_name VARCHAR(64) NOT NULL COMMENT '姓名', password_hash VARCHAR(255) NOT NULL COMMENT '密码HASH', phone VARCHAR(32) DEFAULT NULL COMMENT '手机号', email VARCHAR(128) DEFAULT NULL COMMENT '邮箱', avatar_url VARCHAR(255) DEFAULT NULL COMMENT '头像', dept_id BIGINT DEFAULT NULL COMMENT '部门ID', status INT NOT NULL DEFAULT 1 COMMENT '状态:1正常 2锁定 3禁用', last_login_time BIGINT DEFAULT NULL COMMENT '最后登录时间', last_login_ip VARCHAR(64) DEFAULT NULL COMMENT '最后登录IP', enabled TINYINT NOT NULL DEFAULT 1 COMMENT '启用:1是 0否', del_flag TINYINT NOT NULL DEFAULT 0 COMMENT '删除标记:0正常 1删除', version INT NOT NULL DEFAULT 1 COMMENT '乐观锁', create_date BIGINT NOT NULL COMMENT '创建时间', update_date BIGINT NOT NULL COMMENT '更新时间', creator BIGINT DEFAULT NULL COMMENT '创建人', updater BIGINT DEFAULT NULL COMMENT '更新人', UNIQUE KEY uk_user_code (user_code), KEY idx_dept_id (dept_id), KEY idx_status (status), KEY idx_enabled_del (enabled, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='平台用户表';

2.1.2 sys_dept(部门)

 
CREATE TABLE sys_dept ( id BIGINT PRIMARY KEY COMMENT '主键ID', parent_id BIGINT NOT NULL DEFAULT 0 COMMENT '父级ID', dept_code VARCHAR(64) NOT NULL COMMENT '部门编码', dept_name VARCHAR(128) NOT NULL COMMENT '部门名称', sort_code INT NOT NULL DEFAULT 0 COMMENT '排序', enabled TINYINT NOT NULL DEFAULT 1 COMMENT '启用:1是 0否', del_flag TINYINT NOT NULL DEFAULT 0 COMMENT '删除标记:0正常 1删除', version INT NOT NULL DEFAULT 1 COMMENT '乐观锁', create_date BIGINT NOT NULL, update_date BIGINT NOT NULL, creator BIGINT DEFAULT NULL, updater BIGINT DEFAULT NULL, UNIQUE KEY uk_dept_code (dept_code), KEY idx_parent_id (parent_id), KEY idx_enabled_del (enabled, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表';

2.2 角色与权限(RBAC)

2.2.1 sys_role(角色)

 
CREATE TABLE sys_role ( id BIGINT PRIMARY KEY COMMENT '主键ID', role_code VARCHAR(64) NOT NULL COMMENT '角色编码', role_name VARCHAR(128) NOT NULL COMMENT '角色名称', role_type INT NOT NULL DEFAULT 1 COMMENT '角色类型:1平台内置 2运营自定义', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', enabled TINYINT NOT NULL DEFAULT 1 COMMENT '启用:1是 0否', del_flag TINYINT NOT NULL DEFAULT 0 COMMENT '删除标记:0正常 1删除', version INT NOT NULL DEFAULT 1 COMMENT '乐观锁', create_date BIGINT NOT NULL, update_date BIGINT NOT NULL, creator BIGINT DEFAULT NULL, updater BIGINT DEFAULT NULL, UNIQUE KEY uk_role_code (role_code), KEY idx_enabled_del (enabled, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';

2.2.2 sys_user_role(用户-角色关联)

 
CREATE TABLE sys_user_role ( id BIGINT PRIMARY KEY COMMENT '主键ID', user_id BIGINT NOT NULL COMMENT '用户ID', role_id BIGINT NOT NULL COMMENT '角色ID', create_date BIGINT NOT NULL COMMENT '创建时间', UNIQUE KEY uk_user_role (user_id, role_id), KEY idx_role_id (role_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';

2.2.3 sys_menu(菜单/路由)

Vue3 路由渲染用,支持目录/菜单/按钮。

 
CREATE TABLE sys_menu ( id BIGINT PRIMARY KEY COMMENT '主键ID', parent_id BIGINT NOT NULL DEFAULT 0 COMMENT '父级ID', menu_type INT NOT NULL COMMENT '类型:1目录 2菜单 3按钮', menu_code VARCHAR(64) NOT NULL COMMENT '菜单编码(唯一)', menu_name VARCHAR(128) NOT NULL COMMENT '菜单名称', route_path VARCHAR(255) DEFAULT NULL COMMENT '前端路由path(目录/菜单)', component_path VARCHAR(255) DEFAULT NULL COMMENT '前端组件路径(菜单)', perms_code VARCHAR(128) DEFAULT NULL COMMENT '按钮权限标识(按钮)', icon VARCHAR(64) DEFAULT NULL COMMENT '图标', sort_code INT NOT NULL DEFAULT 0 COMMENT '排序', visible TINYINT NOT NULL DEFAULT 1 COMMENT '是否可见:1可见 0隐藏', enabled TINYINT NOT NULL DEFAULT 1 COMMENT '启用:1是 0否', del_flag TINYINT NOT NULL DEFAULT 0 COMMENT '删除标记:0正常 1删除', version INT NOT NULL DEFAULT 1 COMMENT '乐观锁', create_date BIGINT NOT NULL, update_date BIGINT NOT NULL, creator BIGINT DEFAULT NULL, updater BIGINT DEFAULT NULL, UNIQUE KEY uk_menu_code (menu_code), KEY idx_parent_id (parent_id), KEY idx_type (menu_type), KEY idx_enabled_del (enabled, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单表(目录/菜单/按钮)';

2.2.4 sys_permission(权限点:API/按钮/数据权限入口)

推荐把“接口权限”统一落这里,菜单只是展示;权限才是控制点。
perm_value 例如:saas:tenant:createsaas:billing:invoice:recalc

 
CREATE TABLE sys_permission ( id BIGINT PRIMARY KEY COMMENT '主键ID', perm_type INT NOT NULL COMMENT '类型:1菜单 2按钮 3API 4数据权限', perm_code VARCHAR(64) NOT NULL COMMENT '权限编码(唯一)', perm_name VARCHAR(128) NOT NULL COMMENT '权限名称', perm_value VARCHAR(255) NOT NULL COMMENT '权限表达式(后端校验用)', menu_id BIGINT DEFAULT NULL COMMENT '关联菜单ID(可为空)', http_method VARCHAR(16) DEFAULT NULL COMMENT 'HTTP方法(API权限可填)', api_path VARCHAR(255) DEFAULT NULL COMMENT 'API路径(API权限可填)', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', enabled TINYINT NOT NULL DEFAULT 1 COMMENT '启用:1是 0否', del_flag TINYINT NOT NULL DEFAULT 0 COMMENT '删除标记:0正常 1删除', version INT NOT NULL DEFAULT 1 COMMENT '乐观锁', create_date BIGINT NOT NULL, update_date BIGINT NOT NULL, creator BIGINT DEFAULT NULL, updater BIGINT DEFAULT NULL, UNIQUE KEY uk_perm_code (perm_code), UNIQUE KEY uk_perm_value (perm_value), KEY idx_menu_id (menu_id), KEY idx_enabled_del (enabled, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限点表(按钮/API/数据权限)';

2.2.5 sys_role_permission(角色-权限关联)

 
CREATE TABLE sys_role_permission ( id BIGINT PRIMARY KEY COMMENT '主键ID', role_id BIGINT NOT NULL COMMENT '角色ID', permission_id BIGINT NOT NULL COMMENT '权限ID', create_date BIGINT NOT NULL COMMENT '创建时间', UNIQUE KEY uk_role_perm (role_id, permission_id), KEY idx_permission_id (permission_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表';

2.3 数据权限(平台运营看“哪些租户/哪些分片/哪些模块”)

2.3.1 sys_role_data_scope(角色数据范围)

用于限制运营账号能看到哪些租户:

  • 全部租户

  • 指定租户列表

  • 指定分片 shard_id

  • 指定模块 module_code(例如只负责 POS 客户)

 
CREATE TABLE sys_role_data_scope ( id BIGINT PRIMARY KEY COMMENT '主键ID', role_id BIGINT NOT NULL COMMENT '角色ID', scope_type INT NOT NULL COMMENT '范围类型:1全部 2指定租户 3指定分片 4指定模块', scope_value VARCHAR(255) NOT NULL COMMENT '范围值(tenant_id/shard_id/module_code等,单值)', create_date BIGINT NOT NULL, UNIQUE KEY uk_role_scope (role_id, scope_type, scope_value), KEY idx_role_id (role_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色数据权限范围表';

2.4 登录与审计

2.4.1 sys_login_log(登录日志)

 
CREATE TABLE sys_login_log ( id BIGINT PRIMARY KEY COMMENT '主键ID', user_id BIGINT NOT NULL COMMENT '用户ID', user_code VARCHAR(64) NOT NULL COMMENT '账号', login_time BIGINT NOT NULL COMMENT '登录时间', login_ip VARCHAR(64) DEFAULT NULL COMMENT '登录IP', user_agent VARCHAR(255) DEFAULT NULL COMMENT 'UA', result INT NOT NULL COMMENT '结果:1成功 2失败', fail_reason VARCHAR(255) DEFAULT NULL COMMENT '失败原因', create_date BIGINT NOT NULL COMMENT '创建时间', KEY idx_user_time (user_id, login_time), KEY idx_result_time (result, login_time) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='登录日志';

2.4.2 sys_operate_log(操作审计日志)

建议:所有“租户冻结/解冻、账单重算、套餐改价、分片迁移”等都记录。

 
CREATE TABLE sys_operate_log ( id BIGINT PRIMARY KEY COMMENT '主键ID', user_id BIGINT DEFAULT NULL COMMENT '操作人ID', user_code VARCHAR(64) DEFAULT NULL COMMENT '操作人账号', action_code VARCHAR(64) NOT NULL COMMENT '动作编码(如 TENANT_FREEZE)', action_name VARCHAR(128) NOT NULL COMMENT '动作名称', biz_type VARCHAR(64) NOT NULL COMMENT '业务类型(TENANT/PLAN/INVOICE/PAYMENT/SHARD)', biz_id VARCHAR(128) DEFAULT NULL COMMENT '业务ID(tenantId/invoiceId等)', request_id VARCHAR(64) DEFAULT NULL COMMENT '请求链路ID', request_path VARCHAR(255) DEFAULT NULL COMMENT '请求路径', request_method VARCHAR(16) DEFAULT NULL COMMENT '请求方法', request_body TEXT DEFAULT NULL COMMENT '请求体(脱敏)', response_body TEXT DEFAULT NULL COMMENT '响应体(脱敏)', success TINYINT NOT NULL DEFAULT 1 COMMENT '是否成功:1成功 0失败', error_msg VARCHAR(255) DEFAULT NULL COMMENT '错误信息', cost_ms INT NOT NULL DEFAULT 0 COMMENT '耗时ms', create_date BIGINT NOT NULL COMMENT '创建时间', KEY idx_biz (biz_type, biz_id), KEY idx_user_time (user_id, create_date), KEY idx_action_time (action_code, create_date) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作审计日志';

2.5 字典与参数配置(平台配置中心)

2.5.1 sys_dict_type(字典类型)

 
CREATE TABLE sys_dict_type ( id BIGINT PRIMARY KEY COMMENT '主键ID', dict_code VARCHAR(64) NOT NULL COMMENT '字典编码(唯一)', dict_name VARCHAR(128) NOT NULL COMMENT '字典名称', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', enabled TINYINT NOT NULL DEFAULT 1, del_flag TINYINT NOT NULL DEFAULT 0, version INT NOT NULL DEFAULT 1, create_date BIGINT NOT NULL, update_date BIGINT NOT NULL, UNIQUE KEY uk_dict_code (dict_code), KEY idx_enabled_del (enabled, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典类型';

2.5.2 sys_dict_item(字典项)

 
CREATE TABLE sys_dict_item ( id BIGINT PRIMARY KEY COMMENT '主键ID', dict_code VARCHAR(64) NOT NULL COMMENT '字典编码', item_value VARCHAR(64) NOT NULL COMMENT '字典值', item_label VARCHAR(128) NOT NULL COMMENT '字典标签', sort_code INT NOT NULL DEFAULT 0 COMMENT '排序', enabled TINYINT NOT NULL DEFAULT 1, del_flag TINYINT NOT NULL DEFAULT 0, version INT NOT NULL DEFAULT 1, create_date BIGINT NOT NULL, update_date BIGINT NOT NULL, UNIQUE KEY uk_dict_item (dict_code, item_value), KEY idx_dict_code (dict_code), KEY idx_enabled_del (enabled, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字典项';

2.5.3 sys_param(系统参数)

用于:宽限期天数、账单生成提前天数、默认税率、默认币种、短信模板等

 
CREATE TABLE sys_param ( id BIGINT PRIMARY KEY COMMENT '主键ID', param_code VARCHAR(64) NOT NULL COMMENT '参数编码(唯一)', param_name VARCHAR(128) NOT NULL COMMENT '参数名称', param_value VARCHAR(1024) NOT NULL COMMENT '参数值', value_type INT NOT NULL DEFAULT 1 COMMENT '值类型:1字符串 2数字 3JSON 4布尔', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', enabled TINYINT NOT NULL DEFAULT 1, del_flag TINYINT NOT NULL DEFAULT 0, version INT NOT NULL DEFAULT 1, create_date BIGINT NOT NULL, update_date BIGINT NOT NULL, UNIQUE KEY uk_param_code (param_code), KEY idx_enabled_del (enabled, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统参数表';

2.6(可选)菜单与权限的“预置发布版本”

如果你希望“菜单/权限随版本升级”,建议加一张发布表记录后台菜单权限版本。

2.6.1 sys_acl_release(权限发布记录)

 
CREATE TABLE sys_acl_release ( id BIGINT PRIMARY KEY COMMENT '主键ID', release_version VARCHAR(64) NOT NULL COMMENT '发布版本(如 2026.02)', release_note VARCHAR(255) DEFAULT NULL COMMENT '发布说明', released_by BIGINT DEFAULT NULL COMMENT '发布人', released_at BIGINT NOT NULL COMMENT '发布时间', UNIQUE KEY uk_release_version (release_version) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='后台权限发布记录';

3. 菜单与权限建议(升鲜宝 SaaS 后台标准)

3.1 一级菜单建议(menu_code)

  • TENANT_CENTER(租户中心)

  • PRICING_CENTER(套餐与定价)

  • SUBSCRIPTION_CENTER(订阅管理)

  • BILLING_CENTER(账单与计费)

  • PAYMENT_CENTER(支付与对账)

  • ENTITLEMENT_CENTER(授权与配额)

  • SHARD_CENTER(分片与数据库)

  • USAGE_CENTER(用量与报表)

  • OPERATION_CENTER(运营控制)

  • AUDIT_CENTER(风控与审计)

  • CHANNEL_CENTER(渠道与代理)

  • SYSTEM_CENTER(系统配置)

3.2 权限表达式(perm_value)命名规范

建议统一:saas:<domain>:<resource>:<action>

示例:

  • saas:tenant:list

  • saas:tenant:create

  • saas:tenant:freeze

  • saas:plan:update

  • saas:billing:invoice:recalc

  • saas:shard:migrate

  • saas:system:param:update


4. 预置角色建议(sys_role)

  • SUPER_ADMIN(超级管理员)

  • OPS_ADMIN(运营管理员)

  • FINANCE_ADMIN(财务管理员)

  • SUPPORT_ADMIN(客服/技术支持)

  • CHANNEL_MANAGER(渠道经理)

  • READ_ONLY(只读审计)


5. 落地注意事项(你们生产一定会遇到)

  1. 菜单是展示,权限才是控制:后端鉴权必须以 sys_permission.perm_value 为准

  2. 按钮权限:建议按钮也生成一条 sys_permission(perm_type=2),并把 perms_code 同步到前端

  3. 数据权限:运营人员只允许看自己负责的租户(sys_role_data_scope

  4. 操作日志必须脱敏:手机号、邮箱、密码、支付信息、密钥必须打码

  5. 平台后台与业务系统分开:后台只操作平台库(必要时只读租户库做分析)

posted @ 2026-02-13 13:44  升鲜宝供应链管理系统  阅读(1)  评论(0)    收藏  举报