投研平台后端当前使用 SQLite(data/ir.db)。表结构在启动时通过代码自动创建:
SqliteDataSourceClient#initDemoTable → demo_userUserService#initSchema → sys_userRbacService#init → sys_role / sys_permission / sys_user_role / sys_role_permissionMenuService#init → sys_menu / sys_role_menu(独立菜单权限体系,与接口权限解耦)所有 DDL 均为 CREATE TABLE IF NOT EXISTS(幂等,重复启动不会重建已存在的表)。
由
init-demo-table配置控制是否创建,仅供数据源演示接口使用。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | INTEGER | PRIMARY KEY AUTOINCREMENT | 主键,自增 |
| name | TEXT | NOT NULL | 姓名 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
由
UserService#initSchema创建;RbacService在启动时校验并创建内置管理员。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
| 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 |
由
MenuService#init创建。菜单与接口权限(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 去重)。| 类别 | 内容 |
|---|---|
| 角色 | 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 |
| 菜单 | 工作台、系统管理(目录)→ 用户管理/角色管理/权限管理/菜单管理、数据源演示;启动时全部授权给 ADMIN 角色,新建菜单也会自动授权给 ADMIN |
| 管理员 | 由 ir.auth.admin.username/password 配置(默认 admin / admin123),创建并授予 ADMIN 角色 |
新注册用户由 UserService 自动分配默认角色 USER。