role 角色表
角色定义 · 权限JSON定义角色名称、标识 key、权限列表(JSON),account 通过 role_id 关联。支持超级管理员 is_super 标记。
- name / key / permissions(JSON)
- is_super 超级管理员标记
- 支持启停(status)
webman API、layuiAdmin SPA、插件系统全部共享同一份数据库设计——外键一律 _id、软删全表 deleted_at、append-only 日志不可篡改。
30 张表按职责分入 5 大类,分工清晰,边界明确。
accountaccount_pluginaccount_extendaccount_extend_fieldaccount_extend_optionrolemenulogin_loglogin_locklogin_lock_globalsecurity_rulerequest_limitoperation_logdelete_logtrashrequest_keyrequest_logsystem_configdict_groupdict_itemtag_dicttag_reladmin + user 已合并为统一 account 表,role_id 驱动 RBAC,account_plugin 控制插件权限。
统一账号表——用户名、邮箱、密码(bcrypt)、手机、状态、role_id、deleted_at 软删除。status=1 禁删保护。
账号-插件关联——记录 account_id 在各 plugin_key 下的权限标记,控制插件级访问。
账号扩展数据(EAV)——entity_id + field_id + value,灵活扩展账号附加属性。
扩展字段定义——字段名、类型(文本/数字/日期/选项)、是否必填、排序。
扩展字段选项——当 field 类型为选项时,定义可选值列表。
外键一律 _id(非 _key); password 不进表走 .env; created_at/updated_at/deleted_at DATETIME 本地时区。
登录后按 role_id 返回菜单树,menu 含 plugin_key 字段支持插件菜单注入与卸载。
定义角色名称、标识 key、权限列表(JSON),account 通过 role_id 关联。支持超级管理员 is_super 标记。
定义菜单树结构(parent_id 自关联)、URL、图标、排序、plugin_key。插件安装注入菜单,卸载按 key 删除。
从登录指纹到全局锁定,每张表覆盖一个安全维度。
| 表名 | 类别 | 说明 | 关键字段 |
|---|---|---|---|
| login_log | 登录日志 | 每次登录成功/失败记录,附 IP、设备指纹 | account_id, token_hash(sha256), ip, device_fingerprint, status, revoked_at |
| login_lock | 账号锁定 | 单账号登录失败计数,达到阈值锁定 | account_id, fail_count, locked_until |
| login_lock_global | 全局锁定 | IP 级/全局级锁定,防止撞库 | ip, fail_count, locked_until |
| security_rule | 安全规则 | 可配置的安全策略(锁定阈值、密码强度等) | rule_key, rule_value(JSON), status |
| request_limit | 请求限制 | 按 key(IP/account) 限流窗口 | limit_key, window_seconds, max_requests, current_count |
操作日志不可篡改、删除快照可回溯、回收站可还原。
操作审计日志——记录每个 API 请求的 controller、action、参数、响应、耗时、操作人。append-only,无 updated_at。
删除快照——软删除操作时将整行数据 JSON 快照存入 delete_log,用于回溯与审计。append-only。
回收站——软删记录汇总视图,提供 trashList/restore/purge 三件套操作。restore 将 status 从 4 置回 1。
请求密钥管理——为外部调用方签发的 gateway_key,控制 API 访问权限。
请求日志——记录所有请求的完整信息(URL、方法、参数、响应码)。append-only。
全表统一 deleted_at(NULL=正常);account 特例 status=1 禁删;SoftDeleteBase 联动 status(删=4/还原=1)。