权限模型详解
权限模型详解
M-Doc 的权限体系包含组织角色、文档可见性和 API Scope 三个维度。
组织角色权限矩阵
| 操作 | Owner | Admin | Member | Guest |
|---|---|---|---|---|
| 删除组织 | ✅ | ❌ | ❌ | ❌ |
| 转让组织 | ✅ | ❌ | ❌ | ❌ |
| 修改组织设置 | ✅ | ❌ | ❌ | ❌ |
| 管理成员 | ✅ | ✅ | ❌ | ❌ |
| 创建文档 | ✅ | ✅ | ✅ | ❌ |
| 编辑文档 | ✅ | ✅ | ✅ | ❌ |
| 删除文档 | ✅ | ✅ | ❌ | ❌ |
| 查看 org 文档 | ✅ | ✅ | ✅ | ✅ |
| 查看 private 文档 | ❌ | ❌ | ❌ | ❌ |
private文档仅创建者本人可见。
文档可见性
| 可见性 | 未登录用户 | 组织外用户 | Guest | Member+ |
|---|---|---|---|---|
public |
✅ | ✅ | ✅ | ✅ |
org |
❌ | ❌ | ✅ | ✅ |
private |
❌ | ❌ | ❌ | ❌ |
API Scope 权限
OpenAPI 接口通过 Scope 控制访问权限:
| Scope | 可访问的接口 |
|---|---|
read:documents |
文档列表、文档详情 |
read:articles |
文章树、文章详情、目录清单、文章内容、语义搜索 |
write:articles |
创建文章、更新文章、删除文章、发布文章 |
admin:all |
以上所有(通配权限) |
PAT vs API Key
| 特性 | PAT | API Key |
|---|---|---|
| Scope 限制 | 受限于创建时选择的 Scope | 无限制(拥有全部权限) |
| 认证方式 | Bearer Token | AWS Signature V4 |
| 适用场景 | 脚本、CI/CD、AI 工具 | 服务端集成 |
权限检查流程
对于 OpenAPI 请求,权限检查按以下优先级:
1. UnifiedAuthMiddleware:识别认证类型(PAT / API Key)
↓
2. PAT → 验证 Token → 检查 Scope
API Key → 验证签名 → 跳过 Scope(全权限)
↓
3. 设置 user_id 到请求上下文
↓
4. 控制器获取 user_id,执行业务权限检查对于内部 API 请求(/api/*):
1. AuthMiddleware:验证 JWT Token
↓
2. 设置 user_id 到请求上下文
↓
3. 控制器/Service 检查组织角色和文档权限