Phase 1-3: AList stock deployment, NocoDB 7-table schema, W1/W2 n8n workflows + docs
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
# n8n Workflow 说明(Phase 3–6 — 待实施)
|
||||
|
||||
> n8n 运行在现有 auto.hoelee.com(`bridge_hoelee` 网络)。它是同步器,不是 SOT。
|
||||
|
||||
## 依赖的 AList API(已源码验证,见 API_INTEGRATION.md)
|
||||
|
||||
- 登录换 token:`POST http://alist-serve-resource:5244/api/auth/login`
|
||||
- User:`/api/admin/user/{list,get,create,update,delete,cancel_2fa}`
|
||||
- Role:`/api/admin/role/{list,get,create,update,delete}`
|
||||
|
||||
## 需要的 Workflow
|
||||
|
||||
### WF1 — Customer Create(trigger: Customers 新记录)
|
||||
1. 校验 customer。
|
||||
2. 查重 username → 建/改 AList user(`base_path=/Class`,`role=[专属role]`,`permission=16384`)。
|
||||
3. 建专属 role(`name=customer-<username>`,空 scopes)。
|
||||
4. 用 `/api/admin/user/update` 把 user 绑定到新 role(显式传 role ID,勿留空)。
|
||||
5. 回填 `alist_user_id` / `alist_role_id` 到 NocoDB。
|
||||
6. `sync_status=synced`。
|
||||
|
||||
### WF2 — AccessGrant Create/Update(trigger: AccessGrants 记录变更)
|
||||
1. 找 customer + resource path。
|
||||
2. 判断当前日期 vs start_at/expires_at。
|
||||
3. 若 active → 把该 path 并入该客专属 role 的 `permission_scopes`(permission=0)。
|
||||
4. 若非 active → 不加入。
|
||||
5. 整体 `post /api/admin/role/update` 重写 scopes(幂等)。
|
||||
6. 记录 `sync_status` / `last_sync_at` / `last_sync_error`。
|
||||
|
||||
### WF3 — Expiry Sync(schedule: every 5 min)
|
||||
1. 查所有 active/scheduled grants。
|
||||
2. 计算 desired scopes(NocoDB 有效 grants 并集)。
|
||||
3. 对比 AList 实际 scopes(`role/get`)。
|
||||
4. 移除过期 scope、加入新生效 scope。
|
||||
5. 若无剩余 active grant 且政策启用 → disable 该 customer(`user/update disabled=true`)。
|
||||
6. 记录结果;失败发通知。
|
||||
|
||||
### WF4 — Full Reconciliation(schedule: daily)
|
||||
- desired(NocoDB) vs actual(AList) 全量 diff,修复 AList,记录 reconciliation。
|
||||
|
||||
### WF5 — Customer Suspension(trigger: status=suspended)
|
||||
- `user/update disabled=true` + 清空 role scopes;恢复时重算。
|
||||
|
||||
### WF6 — Customer Delete(soft delete)
|
||||
- NocoDB `status=deleted`;AList 禁用用户 + 清空 scopes,不物理删除。
|
||||
|
||||
## 幂等规则(规格 §28)
|
||||
|
||||
所有操作 = get current → compare → apply diff。重跑不产生重复 user/role/scope。
|
||||
更新 scope 一律「整体重写该 role 的 `permission_scopes`」。
|
||||
|
||||
## 待定项(实施时确认)
|
||||
|
||||
- n8n 内网访问 AList 的 host 名(预期 `http://alist-serve-resource:5244`)。
|
||||
- 登录 token 缓存 / 刷新策略(JWT_EXPIRE=2h → 建议每次 workflow 起手先 login)。
|
||||
Reference in New Issue
Block a user