diff --git a/README.md b/README.md index dc40b33..ac14e09 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ 题库 SaaS 后端,当前目标是从旧 PocketBase / Supabase 方案迁移到可控的 ASP.NET Core + PostgreSQL 架构。 -这个仓库目前处在新后端初始化和数据库模型迁移阶段:Domain 实体、EF Core Fluent 配置、PostgreSQL 初始建库 migration、模型约束测试已经建立;API/Worker 的具体业务实现会在这个基础上继续推进。 +这个仓库目前处在新后端初始化和安全底座建设阶段:Domain 实体、EF Core Fluent 配置、PostgreSQL 初始建库 migration、模型约束测试已经建立;API 层已经开始接入 ASP.NET Core 认证授权、本地登录、数据库 Session 和当前租户上下文。 ## 为什么换掉 Supabase @@ -70,6 +70,28 @@ Tiku.Infrastructure/Persistence/Migrations/20260725220742_InitialSchema.cs ### 已落地 +- ASP.NET Core Controller API 已接入统一认证/授权管线。 +- 本地认证不依赖 Supabase Auth: + - 手机号 + 密码登录 + - 短信验证码登录 + - JWT access token + - 数据库 `auth_sessions` refresh/session + - `auth_login_events` 登录事件 +- JWT 不只验签,也会校验对应 `auth_sessions` 是否仍有效;登出或撤销 session 后,旧 access token 会被拒绝。 +- 当前请求上下文已经拆成应用层抽象: + - `ICurrentUser` + - `ICurrentTenant` +- 第一批授权策略已经建立: + - 已登录用户 + - 当前租户成员 + - 租户管理员 +- 第一批认证/租户接口已经建立: + - `POST /api/auth/login/password` + - `POST /api/auth/login/sms` + - `POST /api/auth/refresh` + - `POST /api/auth/logout` + - `GET /api/me` + - `GET /api/tenants/current` - 多租户数据表普遍包含 `TenantId`。 - 大量租户内关系使用 composite FK,避免只靠应用代码约定租户一致性。 - 不迁移 Supabase RLS、`app_private` schema、生产保护 policy。 @@ -95,14 +117,21 @@ Tiku.Infrastructure/Persistence/Migrations/20260725220742_InitialSchema.cs - decimal precision - 租户关系 composite FK - PB raw record 可追踪主键 +- API / Auth 测试覆盖: + - 未登录返回 401 + - 无权限返回 403 + - 密码登录成功/失败 + - 短信验证码登录成功/失败 + - 登录后访问当前用户和当前租户 + - 登出后旧 access token / refresh token 被拒绝 ### 计划落地 后续 API / Worker 实现时,需要继续把下面这些策略固化成代码和测试: -- 统一租户上下文解析,禁止从请求 body 直接信任 `tenantId`。 -- API 层基于用户、租户成员、角色模板、权限 JSON 做授权。 -- 平台管理员、租户管理员、教师/运营、学生等权限边界明确拆分。 +- 业务 API 不直接信任请求 body 的 `tenantId`;登录阶段可选择租户,登录后业务请求以 JWT/session 中解析出的当前租户为准。 +- API 层继续基于用户、租户成员、角色模板、权限 JSON 扩展授权策略。 +- 平台管理员、租户管理员、教师/运营、学生等权限边界继续细化到业务模块。 - Repository / Query 层默认带租户过滤,平台级查询必须显式声明。 - 所有跨租户资源访问必须走应用服务校验,不允许 controller 直查。 - 审计日志覆盖高风险操作: @@ -113,6 +142,7 @@ Tiku.Infrastructure/Persistence/Migrations/20260725220742_InitialSchema.cs - 租户配置、域名、品牌、支付账号变更 - 平台账单、催收、告警处理 - Secret 管理独立化,只在应用层通过安全服务解析 `secret_ref`。 +- 短信发送目前先完成验证码表、哈希校验和限流模型,真实供应商通过接口适配接入。 - 后台 Worker 使用最小权限的应用服务,不直接绕过业务规则写库。 - 对账、导入、批处理任务要求幂等键和可重跑设计。 - 生产环境连接串、密钥、对象存储凭据不进入仓库。 @@ -138,5 +168,6 @@ dotnet ef migrations script \ - 数据库模型迁移已完成到初始 schema。 - migration 已整理为单个初始建库 migration。 -- 当前模型测试通过。 -- 下一步重点是 API / Worker 层的授权、审计、导入、核心业务流程实现。 +- API 安全底座已建立:JWT、Session、本地登录、当前用户、当前租户、基础授权策略。 +- 当前模型测试、认证服务测试、API 认证/租户闭环测试通过。 +- 下一步重点是继续把题库、内容、导入、订单等业务 API 接入这套安全轨道,而不是重新散写权限判断。