feat: add platform admin permissions

This commit is contained in:
Codex
2026-06-30 07:50:02 +08:00
parent 51f8cbdec8
commit 780feee4f8
20 changed files with 392 additions and 63 deletions

View File

@@ -22,7 +22,7 @@ apps/api/src/
referral/ 销售/代理客资追踪、首绑保护、团队关系、CRM 队列
storage/ 对象存储签名 provider
video/ 题目视频列表、搜索、SVIP/次数校验和签名播放
platform-admin/ 平台方 SaaS 租户、订阅、订阅账单候选/批量生成、账单、使用量
platform-admin/ 平台方权限、SaaS 租户、订阅、订阅账单候选/批量生成、账单、使用量
tenant-admin/ 租户品牌、域名、公开设置、登录/商户配置、成员权限、活动/兑换码运营
tenant-content/ 租户后台内容维护:入口、分类树、集合、练习蓝图、题目、视频、分数线、单词、知识手册、资料资源、批量导入
```
@@ -65,6 +65,7 @@ types.ts 仅本领域使用的类型
- 新接口优先使用 `Authorization: Bearer <supabase_access_token>`;后端通过 `auth.users.id -> platform_users.auth_user_id -> tenant_memberships` 映射业务身份。
- 迁移期仍支持 `Authorization: Bearer tk_*` sessionsession 明文只返回客户端,数据库只保存 hash。
- `x-user-id``x-platform-admin-key` 只允许在非生产兼容模式使用;生产必须关闭 `ALLOW_LEGACY_AUTH_HEADERS``ALLOW_PLATFORM_ADMIN_KEY`
- `platform-admin` 路由必须用 `requirePlatformAdmin(ctx, '<platform:scope:action>')` 校验平台权限;前端可用 `GET /api/platform-admin/permissions` 读取权限目录和当前账号 `effective` 能力,但不能把菜单隐藏当成安全边界。
- `platform-admin` 管平台与合作商之间的 SaaS 账务,`tenant-admin` 管合作商自己的品牌、域名、公开配置、登录/商户配置、活动和兑换码,`tenant-content` 管合作商自己的题库和学习内容维护。
- `tenant-admin` 的敏感配置必须拆分:公开字段进入 `config_public`商户密钥、短信密钥、OAuth app secret 进入 `app_private.tenant_secrets` 或生产 KMS/Vault对前端只返回 `secretRef` 和掩码状态。
- `tenant-admin` 权限由 `tenant_memberships.role` 的默认权限和 `permissions` JSON 覆盖共同决定;后端接口必须校验具体权限点,不能只依赖前端菜单隐藏。