|
@@ -735,3 +735,18 @@
|
|
|
| **我的错误(如实列出)** | ① **未参考 v1 既有实现**(`fmode-app/src/app/core/acl.ts` 已有完整 ACL),自行发明 `Profile.identyType`<br>② **把判级放进云函数**当安全边界 —— v1 明确写「服务端以 SessionToken 鉴权为准,客户端 scope 仅用于 UI 过滤」<br>③ **发布前只做 `node --check` 语法校验**,未验证运行时 API 是否存在<br>④ **未在发布前确认接口调用方**(事后确认 studio 根本不调此云函数)|
|
|
| **我的错误(如实列出)** | ① **未参考 v1 既有实现**(`fmode-app/src/app/core/acl.ts` 已有完整 ACL),自行发明 `Profile.identyType`<br>② **把判级放进云函数**当安全边界 —— v1 明确写「服务端以 SessionToken 鉴权为准,客户端 scope 仅用于 UI 过滤」<br>③ **发布前只做 `node --check` 语法校验**,未验证运行时 API 是否存在<br>④ **未在发布前确认接口调用方**(事后确认 studio 根本不调此云函数)|
|
|
|
| **教训** | 改共享服务组件前必须:① 先读存量实现并复用 ② 发布前验证运行时行为 ③ 先确认影响范围 |
|
|
| **教训** | 改共享服务组件前必须:① 先读存量实现并复用 ② 发布前验证运行时行为 ③ 先确认影响范围 |
|
|
|
| **后续** | 用户裁决:**先出 v1 对照报告**,再决定方向。云函数保持原版不动。 |
|
|
| **后续** | 用户裁决:**先出 v1 对照报告**,再决定方向。云函数保持原版不动。 |
|
|
|
|
|
+
|
|
|
|
|
+### 2026-10-20 — 云函数 v0.1.2:分页 + 超管 companyId 过滤 + 非法 companyId 校验
|
|
|
|
|
+
|
|
|
|
|
+| 项 | 内容 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| 动作 | 补完上轮遗留的三项云函数能力 |
|
|
|
|
|
+| 版本 | `xlosi3m46q` **v0.1.1-fallback → v0.1.2**(26091 → 27209 字符)|
|
|
|
|
|
+| **① 分页** | 新增 `limit`(上限 500 防拖库)/ `skip`;返回体增 `total`(分页前总数,未分页时为 0)|
|
|
|
|
|
+| **② 超管按 companyId 过滤** | `scope='all'` 时若传 `companyId` → `q.equalTo('company', ...)`(多账套切换用)|
|
|
|
|
|
+| **③ 非法 companyId 校验** | `scope='all'` 与 `scope='company'` 两处:`Company.get()` 失败 → **400 明确报错**(此前静默忽略返回全量)|
|
|
|
|
|
+| **实现原则** | 🔴 **只增不改**:原查询逻辑完全保留;`limit=0` 回退原行为(1000 条)|
|
|
|
|
|
+| **发布前预检(吸取前两次事故教训)** | · 逐项检查新 API 是否原版验证过:`q.count()` / `q.skip()` 为**新引入**(Parse 标准 API)→ **均加 try/catch 兜底**(`skip` 失败→400 / `count` 失败→`total=-1` 降级,不影响分页主流程)<br>· **移除** `response.headers[]`(原版从未用过,属未验证 API)→ 改为**返回体带 `total`**(`_ok()` 支持扩展字段,已验证)|
|
|
|
|
|
+| 验证证据(全实测) | ① **分页完整性**:`skip=0/10/20/30/40/50` + `limit=10` → 累计 **54 条、去重 54、无重复、覆盖全部**;`total=54` 正确<br>② **边界**:`limit=9999` → 被限制 500 ✅;`limit=0` → 回退全量 54 ✅<br>③ **超管过滤**:`scope=all&companyId=rpnXZC1loU` → **6 个,与直查库逐条一致** ✅<br>④ **非法 companyId** → `400 companyId 无效` ✅<br>⑤ **三身份权限**(真实 sessionToken 端到端):超管 all=54/company=6/mine=11;公司管理员 all=**403**/company=1/mine=0;普通成员 all=**403**/company=1/mine=0 ✅<br>⑥ **回归**:`ng test` 484 / build / `verify:ui` 11 / `verify:docs` 44 / 云函数验收 **9/9** |
|
|
|
|
|
+| 恰实说明(前端分页) | 前端仍为「一次拉全量 + 前端切片」(`visibleAgents`),**未改为服务端分页**——因为当前数据量(54/6/0~11)远小于 500 上限,前端切片性能更好。**后端分页能力作为预留**,数据量增长时可直接启用 |
|
|
|
|
|
+| 备份 | `.local-backup/xlosi3m46q-v0.1.1-fallback-已发布备份.js`(回滚基线)|
|