投研平台后端当前使用 SQLite(data/ir.db)。表结构与种子数据由 sql/init.sql 一次性脚本初始化(应用代码不再做建表/灌种子):
sqlite3 data/ir.db < sql/init.sql
脚本中所有 DDL/DML 使用 IF NOT EXISTS / INSERT OR IGNORE,可重复执行。
供数据源演示接口
/api/datasource/*使用。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | INTEGER | PRIMARY KEY AUTOINCREMENT | 主键,自增 |
| name | TEXT | NOT NULL | 姓名 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
默认管理员
admin / admin123由sql/init.sql灌入(BCrypt 哈希)。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | INTEGER | PRIMARY KEY AUTOINCREMENT | 主键,自增 |
| username | TEXT | NOT NULL UNIQUE | 登录名(唯一) |
| password | TEXT | NOT NULL | BCrypt 加密后的密码 |
| nickname | TEXT | — | 昵称 |
| enabled | INTEGER | NOT NULL DEFAULT 1 | 是否启用(0=禁用,1=启用) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
内置种子角色:
ADMIN(超级管理员)、USER(普通用户)。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | INTEGER | PRIMARY KEY AUTOINCREMENT | 主键,自增 |
| code | TEXT | NOT NULL UNIQUE | 角色编码(唯一) |
| name | TEXT | NOT NULL | 角色名称 |
| description | TEXT | — | 描述 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
内置种子权限:
user:list/create/update/delete、role:list/create/update/delete/assign、permission:list/create/delete、data:query/write。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | INTEGER | PRIMARY KEY AUTOINCREMENT | 主键,自增 |
| code | TEXT | NOT NULL UNIQUE | 权限编码(唯一) |
| name | TEXT | NOT NULL | 权限名称 |
| description | TEXT | — | 描述 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
多对多,复合主键;删除用户/角色时对应关联一并清理。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| user_id | INTEGER | NOT NULL,PRIMARY KEY(user_id, role_id) | 用户 ID → sys_user.id |
| role_id | INTEGER | NOT NULL,PRIMARY KEY(user_id, role_id) | 角色 ID → sys_role.id |
多对多,复合主键;删除角色/权限时对应关联一并清理。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| role_id | INTEGER | NOT NULL,PRIMARY KEY(role_id, permission_id) | 角色 ID → sys_role.id |
| permission_id | INTEGER | NOT NULL,PRIMARY KEY(role_id, permission_id) | 权限 ID → sys_permission.id |
菜单与接口权限(
sys_permission)完全解耦:菜单自身是一棵树,通过sys_role_menu直接授予角色,不读取任何接口权限编码。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | INTEGER | PRIMARY KEY AUTOINCREMENT | 主键,自增 |
| parent_id | INTEGER | — | 父菜单 id → sys_menu.id;NULL = 顶级 |
| name | TEXT | NOT NULL | 菜单名称 |
| type | TEXT | NOT NULL DEFAULT 'menu' | 类型:dir=目录 / menu=菜单 |
| route | TEXT | — | 前端路由 path |
| component | TEXT | — | 前端组件路径 |
| icon | TEXT | — | 菜单图标 |
| sort | INTEGER | DEFAULT 0 | 排序号(升序) |
| visible | INTEGER | DEFAULT 1 | 是否可见(0=隐藏,不参与用户菜单下发) |
| status | INTEGER | DEFAULT 1 | 是否启用(0=停用) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
多对多,复合主键;
RbacService#deleteRole与MenuService#deleteMenu会同步清理关联。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| role_id | INTEGER | NOT NULL,PRIMARY KEY(role_id, menu_id) | 角色 ID → sys_role.id |
| menu_id | INTEGER | NOT NULL,PRIMARY KEY(role_id, menu_id) | 菜单 ID → sys_menu.id |
┌─────────────── 接口权限(RBAC,sys_permission 管接口) ───────────────┐
sys_user ──< sys_user_role >── sys_role ──< sys_role_permission >── sys_permission
(用户) (多对多) (角色) (多对多) (权限)
┌─────────────── 菜单权限(sys_menu,独立体系,与接口权限解耦) ───────────────┐
sys_user ──< sys_user_role >── sys_role ──< sys_role_menu >── sys_menu
(用户) (多对多) (角色) (多对多) (菜单树)
DISTINCT 去重)。sql/init.sql 一次性灌入)| 类别 | 内容 |
|---|---|
| 角色 | ADMIN(超级管理员,拥有全部权限)、USER(普通用户,默认注册用户角色) |
| 权限 | user:list user:create user:update user:delete、role:list role:create role:update role:delete role:assign、permission:list permission:create permission:delete、data:query data:write |
| 菜单 | 工作台、系统管理(目录)→ 用户管理/角色管理/权限管理/菜单管理、数据源演示、投研业务 6 个一级目录(基本面 / 政策面 / 资金面 / 债市分析 / 权益分析 / 多资产),其中 基本面 下含 7 个二级菜单(GDP / 投资 / 出口 / 消费 / 通胀 / 供给 / 景气度);脚本一次性把全部菜单授权给 ADMIN,新建菜单仍会运行时自动授权给 ADMIN |
| 管理员 | admin / admin123(BCrypt 哈希写死在脚本首注,使用前请尽快改密) |
新注册用户由 UserService 在运行时自动分配默认角色 USER。