# Platform(go-zero)骨架 Publish(校验蓝图 → 分配 schema → 生成/执行 DDL → 注册元数据)+ 动态 CRUD + JWT。 ## 目录 ```text platform/ platform.go docker-compose.yml # 本地 Postgres etc/platform.yaml internal/ authx/ # JWT 签发/校验 + Dev 头兜底 blueprint/ schema/ # Postgres DDL(数值 PK 用 IDENTITY) meta/ crud/ # MemoryEngine + PostgresEngine logic/applogic/ handler/ ``` ## 运行(内存 + JWT) ```bash cd platform go test ./... go run . -f etc/platform.yaml # 另开终端 go run ./scripts/smoke.go ``` 冒烟会:签发 JWT → publish → create → list → 非法 token 应 401。 ## 运行(Postgres 行级 Engine) ```bash docker compose up -d ``` 改 `etc/platform.yaml`: ```yaml DataSource: "postgres://platform:platform@127.0.0.1:5432/platform?sslmode=disable" DevAuth: false ``` 再启动服务。此时: - publish **真实建 schema/表** - CRUD 走 `PostgresEngine`(参数化 SQL + `tenant_id` 强制条件) ## JWT ```http POST /api/v1/auth/token {"tenant_id":1,"user_id":1,"secret":"dev-only-change-me"} → {"access_token":"...","token_type":"Bearer","expires_at":...} ``` 业务请求: ```http Authorization: Bearer ``` | 配置 | 行为 | |------|------| | `DevAuth: false` | 必须带合法 JWT | | `DevAuth: true` | 无 JWT 时可用 `X-Tenant-Id` / `X-User-Id`(仅本地) | | 带了错误 Bearer | 一律 401(即使 DevAuth=true) | 生产请更换 `Auth.AccessSecret` / `IssueSecret`,并关掉 `DevAuth`。 ## 元数据落库 启用 DataSource 后自动迁移并使用 `platform_meta.tenant_apps`: - 存 blueprint / ddl / endpoints / status - 进程重启后仍可按 slug 解析动态 CRUD - 无库时回退内存 `MemoryStore`