# 06 - 云同步（基础可用）：安全（RBAC/二次认证）与“可控落盘”

## 目标（PRD 约束）

- 高风险操作支持二次认证（例如启用/关闭同步、切换账号、调整“是否允许落盘”等）
- 客户端读取服务端安全配置，决定任务信息是否允许落盘
- 当服务端标记“终端不可信/不允许落盘”时，客户端只能在内存中持有任务信息；退出应用后不保留任务数据

## 范围

- 客户端：落盘策略切换（持久化 ↔ 内存）、高风险操作二次确认/二次认证 UI
- 服务端：策略下发 + 二次认证挑战/校验接口（与 `04-*` 协作）

## 依赖

- 依赖 `04-*` 提供策略下发与二次认证能力（至少一种实现）
- 依赖 `05-*` 的基础登录/同步 UI 入口

## 关键设计点（v1.2.0 必须明确）

### 1) “落盘”定义与边界

需要明确“哪些数据算落盘”，并在禁止落盘时全部避免：
- 任务数据（列表/详情）
- 同步状态（上次同步时间、待同步队列等）
- 登录凭据（token/refresh token/会话标识）

### 2) 本地存储抽象

建议把前端（或宿主）本地存储封装为可替换实现：
- 允许落盘：使用现有 localStorage/SQLite 等
- 禁止落盘：使用内存实现（刷新/退出即清空）

要求：
- 切换策略时行为可预期（例如从允许 → 禁止：立即清空已落盘数据并提示用户）
- 不在日志或 UI 中暴露敏感信息

### 3) 二次认证（挑战-响应）

建议采用“服务端驱动”的挑战流程：
- 客户端发起高风险操作
- 服务端返回“需要二次认证”的响应（包含 challenge 信息）
- 客户端弹出二次认证输入（例如二次口令/一次性验证码）
- 客户端携带证明再次提交

若服务端暂不支持二次认证，也需有“能力探测/降级提示”，避免客户端卡死。

## 验收标准

- 服务端返回 `allowPersist=false` 时：
  - 客户端不会把任务数据与凭据写入任何持久化介质
  - 退出应用后重新进入，任务数据为空（需重新登录/拉取）
- 对指定高风险操作：
  - 无二次认证证明时被拒绝，并提示需要二次认证
  - 提供正确二次认证后操作成功

