feat(project): init

This commit is contained in:
2026-02-02 14:27:56 +08:00
commit ed3219deb4
46 changed files with 7235 additions and 0 deletions

49
docs/API.md Normal file
View File

@@ -0,0 +1,49 @@
# CMS Service API概览
CMS 对外暴露 RESTful API并提供 Scalar 文档:
- `GET /scalar`
## 通用约定
- Header
- `Authorization: Bearer <access_token>`
- `X-Tenant-ID: <tenant_uuid>`
- JWT 校验:默认从 IAM 的 `/.well-known/jwks.json` 获取公钥(也可配置 `JWT_PUBLIC_KEY_PEM` 静态公钥)
- 所有资源均为多租户数据:所有表均包含 `tenant_id` 字段,并在查询/写入时强制按 `tenant_id` 过滤。
- 权限校验CMS 侧不实现 RBAC 规则聚合,仅通过 iam-client 调用 IAM `POST /authorize/check` 由 IAM 裁决。
## 接口清单v1
### 栏目Column
- `POST /v1/columns``cms:column:write`
- `GET /v1/columns``cms:column:read`,分页/搜索)
- `GET /v1/columns/{id}``cms:column:read`
- `PATCH /v1/columns/{id}``cms:column:write`
- `DELETE /v1/columns/{id}``cms:column:write`
### 标签/分类Tag
- `POST /v1/tags``cms:tag:write``kind` 支持 `tag|category`
- `GET /v1/tags``cms:tag:read`,分页/搜索/按 kind 过滤)
- `GET /v1/tags/{id}``cms:tag:read`
- `PATCH /v1/tags/{id}``cms:tag:write`
- `DELETE /v1/tags/{id}``cms:tag:write`
### 媒体库Media
- `POST /v1/media``cms:media:manage`,登记 URL/元数据)
- `GET /v1/media``cms:media:read`,分页/搜索)
- `GET /v1/media/{id}``cms:media:read`
- `DELETE /v1/media/{id}``cms:media:manage`
### 文章Article
- `POST /v1/articles``cms:article:write`,创建草稿)
- `GET /v1/articles``cms:article:read`,分页/搜索/按状态/栏目/标签过滤)
- `GET /v1/articles/{id}``cms:article:read`
- `PATCH /v1/articles/{id}``cms:article:write`
- `POST /v1/articles/{id}/publish``cms:article:publish`,发布并生成版本)
- `POST /v1/articles/{id}/rollback``cms:article:rollback`,回滚到指定版本并生成新版本)
- `GET /v1/articles/{id}/versions``cms:article:read`,版本列表分页)

18
docs/TEST_REPORT.md Normal file
View File

@@ -0,0 +1,18 @@
# 测试报告CMS Service
## 测试范围
- iam-client 适配层:
- 权限校验结果缓存命中
- IAM 不可用时的 stale-cache 降级
## 测试用例
- `tests/iam_client_cache.rs`
- `iam_client_caches_decisions`
- `iam_client_uses_stale_cache_on_error`
## 执行结果
- `cargo test`:全部通过