Skip to content

feat(auth): 身份批量导入的异步 Job 支持(>500 行,invite 策略) #2781

Description

@os-zhuang

背景

#2766(PR #2771)的 POST /api/v1/auth/admin/import-users同步专用,上限 500 行(scrypt 每行 ~100ms),async: true 返回 ASYNC_NOT_SUPPORTED。大批量(数千员工)目前只能分批调用。

诉求

复用现有 sys_import_job 对象 + service-job 基建(通用导入的异步路径参照 rest-server.ts 的 import job worker),给身份导入加异步 Job:

  • POST /admin/import-users 支持 async: true(或按行数自动升级),返回 { jobId };进度/结果走现有 sys_import_job 查询面。
  • Job 上限建议 ~10,000 行(scrypt 串行 ≈ 17 分钟,实现期实测定稿);worker 内 await 串行即可(scrypt 吃满单核,无并发收益)。
  • 仅支持 invite 策略temporary 策略明确拒绝:Job 结果是持久化面,红线禁止临时密码进入任何持久化(见 PR feat(auth): 管理员直建用户 + 手机号登录 + sys_user 批量导入(#2766 V1/V1.5/V2) #2771 的红线测试);除非未来引入"临时密码经邮件/短信逐行下发"的通道,否则 temporary 只走同步。
  • 行级结果采样沿用 IMPORT_JOB_RESULTS_CAP 语义;不写 undo_log(撤销=批量删用户,与同步版一致禁用)。
  • 邮件逐行发送失败落行级 INVITE_EMAIL_FAILED,Job 不因单行邮件失败而失败。
  • 进程内 Job 的既有限制(重启悬挂、单节点)沿用通用导入语义,发布说明标注。

相关

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions