Files
alist-serve-resource/docs/N8N_WORKFLOWS.md
T

2.5 KiB
Raw Blame History

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)。