Check Feishu directory scope and highlight app availability

This commit is contained in:
Codex committed 2026-10-23 14:35:09 +08:00
1 parent bf9e1c3c2c
commit e2597719c8
7 files changed
+147 -4

No files matched your search

+3
View File
@@ -22,6 +22,7 @@
- FR-02:先读取通讯录可见范围,逐个遍历部门子节点、分页读取各部门直属成员,按 open_id 去重;无法完成任何一页则本次不写入。
- FR-03:只在完整读取成功后批量更新导入表和状态;不删除缺席记录,避免范围缩小或临时失权导致误删。不得从导入结果自动给 VPN 授权。
- FR-04:页面显示同步时间、部门/成员数及失败提示,并列出导入的成员和部门供管理员核对。
- FR-05:飞书身份页突出提醒管理员发布应用,并将应用可用范围设为“全体员工”;打开页面即通过现有应用身份凭据检查实时通讯录可见范围,存在可见部门时探测部门子节点及成员列表权限。范围为空或接口被拒绝时分别提示,不能把接口可用误报为全员可见。
- NFR-01:限制单次运行时长、页数和条数,同一实例内互斥;外部错误不含密钥、token 或通讯录原始报文。
- NFR-02:仅管理权限、HTTPS 入口可读写导入信息;关闭自动同步不会删除已导入数据。
@@ -34,6 +35,7 @@
## 4. 接口、数据与配置契约
- 新增 `GET /api/system/identity/directory-sync`、`PUT /api/system/identity/directory-sync`(enabled)、`POST /api/system/identity/directory-sync/run`。仅 admin + HTTPS;不返回凭据。
- 新增 `GET /api/system/identity/directory-sync/check`,只返回 `/scopes` 的入口计数和部门/用户列表探测状态、受控错误码,不返回姓名、open_id 或 access token。可用范围“全体员工”和应用发布状态无法由这些接口直接证明,须在 UI 明确标为人工设置。
- 新增同步状态、部门、成员表,使用 `(issuer, app_id, id)` 区分应用;保留缺席成员,仅更新本次见到的数据和 `last_seen_at`。
- 最近同步状态还记录飞书 `/scopes` 返回的可见部门入口数和单独成员数;这不是企业通讯录总人数。
- 不修改原有登录、专线及 VPNUser API。Fly书权限以实际 API 报错为准:部门与成员列表通常要求部门和用户的应用身份读取权限及足够的通讯录可见范围,页面提供具体引导。
@@ -53,6 +55,7 @@
| AC-02 | FR-02 | 模拟部门分页与成员重复 | 完整遍历、按 open_id 去重 | `go test ./backend/internal/identityprovider -run TestReadDirectory` | 通过 |
| AC-03 | FR-03 | 中间页错误 | 不接受不完整快照,不给新准入 | `TestReadDirectoryFailsClosedOnIncompletePage`;Go 事务代码检查 | 通过 |
| AC-04 | FR-04 | 打开身份页 | 可查看状态及成员摘要 | `npm run build`、远程 API 手动试读 | API 通过:1 名成员、0 个部门;页面待人工检查 |
| AC-05 | FR-05 | 打开身份页(当前部门入口 0,单独成员 1) | 红色提示全体员工/发布;自动显示范围不足且不误判部门接口权限 | `TestDirectoryAccessCheckDistinguishesVisibilityAndEndpointPermission`、前端构建、远程只读检查 | 本地测试和构建通过;远程待验证 |
2026-10-23 测试服务器部署 `594bb61` 后,手动同步成功,自动开关仍关闭。`/scopes` 实际返回可见部门入口 0 个、单独可见成员 1 位;成功导入成员 1 位、部门 0 个。这与用户截图中的企业通讯录 3 位成员不同,不能将可见范围误认为企业总人数。界面已增补范围计数与部门缺失提示;等待管理员在飞书开放平台配置部门权限、应用通讯录可见范围并发布后复测组织树。HTTPS 登录页返回 200、管理健康检查通过、OpenVPN 原进程持续运行。