82 lines
4.1 KiB
Markdown
82 lines
4.1 KiB
Markdown
# 1.2 核心特性
|
||
|
||
:::tip 概述
|
||
本页展开介绍 EasyGoAdmin 的核心设计与能力清单。每项特性在后续章节都有对应的深入讲解,此处只需建立整体印象。
|
||
:::
|
||
|
||
## 反射元数据驱动
|
||
|
||
路由与元数据一处声明——**`RouteSpec` 表即路由定义**。在 `registerControllers` 内按控制器集中声明:
|
||
|
||
```go
|
||
// internal/router/router.go
|
||
Bind(rg, new(handler.CDept), map[string]RouteSpec{
|
||
"Page": {Method: "GET", Path: "/api/dept/page", Summary: "部门分页", Permission: "sys:dept:page", Log: "部门管理-查询分页记录", LogType: "query"},
|
||
})
|
||
```
|
||
|
||
`router.Bind` 反射扫描控制器方法(签名固定为 `func (c *CXxx) Method(ctx context.Context, req *dto.XxxReq) (*dto.XxxRes, error)`),按方法名查表注册 Gin 路由并写入路由元数据表。authz 权限校验、operation_log 日志记录、公开接口白名单三处与注册同源,杜绝漏配与漂移。
|
||
|
||
→ 详见 [4.4 反射元数据驱动机制](/zh/architecture/bind-mechanism.html)
|
||
|
||
## 声明式 CRUD 基座
|
||
|
||
标准五方法(Page/List/Detail/Add/Update/Delete/BatchDelete)通过声明 `ModuleSpec[Item, LItem, DRes]` 委托基座:
|
||
|
||
- 查询能力(LikeFields/EqFields/KeywordFields/Filter/DataScope)按固定顺序生效
|
||
- 生命周期钩子(Before/After Add/Update/Delete、AfterPageList 等)承接业务差异
|
||
- 输出映射(SerializeMaps 字典翻译、FileFields 补域名、IsTree 树形)声明即生效
|
||
- 写不进钩子的复杂逻辑(导入导出、登录、分配菜单)手写方法,合法逃生舱
|
||
|
||
→ 详见 [附录 G ModuleSpec 声明速查](/zh/appendix/module-spec.html)
|
||
|
||
## 多数据库支持
|
||
|
||
支持 MySQL、PostgreSQL、SQL Server、SQLite、Oracle 五种方言,`config.yaml` 一处切换。配套 `cmd/migrator` 跨库整库迁移工具(源库内省 → 目标方言 DDL → 分批搬运 → 序列修复)。
|
||
|
||
## 代码生成器
|
||
|
||
内省表结构 → 按模板渲染后端四件套与前端页面 → 幂等创建菜单行 → 自动向 `router.go` 追加 Bind 路由声明块。CLI(`make gen`)与 Web 界面双入口,覆盖策略由配置控制。
|
||
|
||
→ 详见 [第 10 章 代码生成器](/zh/generator/overview.html)
|
||
|
||
## 多租户与数据权限
|
||
|
||
- `tenant` 中间件解析租户上下文,`Ctx(ctx)` 入口对白名单表自动注入租户隔离 Scope
|
||
- 全局 Create 钩子自动补齐 `tenant_id` 审计字段
|
||
- 数据权限经声明 `DataScope: ApplyDataScope("dept_id")` 按部门维度收敛可见范围
|
||
|
||
## RBAC 权限体系
|
||
|
||
用户-角色-菜单三级模型,关联表 user_role / role_menu。权限码形如 `sys:dept:page`,在 RouteSpec 声明后由 authz 中间件统一校验,前端配合 `v-permission` 指令控制按钮可见性。
|
||
|
||
## 日志与审计
|
||
|
||
- 操作日志:RouteSpec 携带 `Log`/`LogType`,operation_log 中间件自动记录请求与响应摘要
|
||
- 登录日志:登录动作独立留痕
|
||
- 全链路 trace:trace 中间件为每个请求分配追踪标识,日志输出可关联
|
||
|
||
## 定时任务调度
|
||
|
||
内置基于 cron 表达式的轻量调度器,任务包经 blank import 触发 init 自注册,调度器由 `service.DaemonInit` 启动。配套任务管理界面与执行日志。
|
||
|
||
## 文件处理体系
|
||
|
||
- 上传先进 `temp/`,保存时经 saveTransform 转正到模块 `FileSaveDir`
|
||
- 富文本正文统一存 `[IMG_URL]/{相对路径}` 占位符,读侧唯一还原出口是 `ExpandContentFields`
|
||
- Excel 导入导出基于 excelize 封装,前端配套导入导出组件
|
||
|
||
## 监控中心
|
||
|
||
服务监控(CPU/内存/磁盘/goroutine,分平台实现)、缓存监控(Redis 信息与键空间)、在线用户(JWT 会话管理),前端图表化呈现。
|
||
|
||
## 工程质量
|
||
|
||
| 能力 | 说明 |
|
||
|---|---|
|
||
| fail-fast 启动 | `config.Validate` 校验 JWT 密钥与 DSN,不合法直接拒绝启动 |
|
||
| 优雅关闭 | 停 HTTP → 停定时任务 → 关 DB → 关 Redis |
|
||
| 软删除铁律 | 一切删除走 `del_flag=1`,物理删除被全局钩子拦截 |
|
||
| 质量门禁 | `make check` = fmt-check + vet + test-short + check-config |
|
||
| WireCheck | 中间件依赖的服务能力未注册时启动告警降级 |
|