7 层中间件,6 个 Provider,
构成 tphelp 的骨架。
中间件串起安全与审计、Provider 隔离插件边界、CrudController 一行 trait 得全套 CRUD、AutoRouter 自动注册——加控制器零配置。
请求经过 7 层中间件才到控制器。
每一层只做一件事,链式串联,按需开启。
| 层序 | 中间件 | 职责 | 关键行为 |
|---|---|---|---|
| 1 | StaticFile | 静态资源直接返回 | 匹配 .js/.css/.png 等后缀,命中则直返不进入后续逻辑 |
| 2 | SecurityGuard | 安全头部设置 | X-Frame-Options、X-Content-Type-Options、CORS 头注入 |
| 3 | GatewayKey | 网关层密钥校验 | 校验请求头携带的 gateway_key,拒绝非授权来源 |
| 4 | AdminAuth | 身份鉴权 | Token 解析、sha256 指纹比对 login_log.token_hash、注入 appUser/isSuper、8h TTL |
| 5 | RateLimit | 频率限制 | 基于 request_key 或 IP 做窗口限流,防止暴力调用 |
| 6 | Idempotent | 幂等保护 | 基于 idempotent_key 去重,防止重复提交 |
| 7 | OperationLog | 操作审计 | 记录每个请求的 action/参数/结果/耗时,写入 append-only 日志 |
6 个 Provider,插件唯一入口。
所有插件只能通过 Provider 层与基座交互,签名锁定,不污染基座代码。
账号查询、创建、状态管理——插件获取当前登录用户信息、校验权限的唯一入口。
字典数据读取——插件获取系统字典项(如状态枚举、类型映射),统一 dict_group/dict_item 体系。
系统配置存取——插件读写 system_config 表,支持分组、缓存、类型安全取值。
请求上下文注入——当前 account_id、role_id、plugin_key 等上下文信息,由中间件写入、Provider 提供读取。
审计日志写入——插件调用统一审计接口,自动记录操作人、时间、参数、结果,写入 operation_log。
菜单注入与卸载——插件安装时按 plugin_key 写入菜单、卸载时按 key 清理,实现菜单动态挂载。
一行 trait,全套 CRUD。
use CrudController trait,控制器立即获得 9 个方法 + 审计打码 + 回收站。
list
分页列表,支持搜索、排序、字段筛选
all
全量列表(不分页),适合下拉选项
store
新增记录,自动校验 request DTO
update
更新记录,按 ID 匹配,自动记录操作审计
delete
软删,置 deleted_at + status=4(软删联动),写入 delete_log
get
单条详情,支持关联预加载
回收站三件套
// trashList 回收站列表 // restore 还原(status 置 1) // purge 物理删除 ✓ 完整软删生命周期
审计打码
// $masked 字段定义 // maskIfNeeded() 自动脱敏 // canViewRaw() 权限判断 ✓ Sensitive 单一真源
输入输出合同,路由零配置。
DTO 层锁定 API 契约、AutoRouter 自动注册 CrudController。
request/ DTO
输入合同——定义每个接口的字段、类型、校验规则,控制器通过 DTO 获取已验证的输入数据。
resource/ DTO
输出合同——定义每个接口的响应结构,包括字段映射、脱敏规则、关联展开,确保 API 契约一致。