Skip to main content

sync_admin_from_env

Function sync_admin_from_env 

Source
pub(crate) async fn sync_admin_from_env(client: &Client) -> Result<(), AppError>
Expand description

启动时按 ADMIN_* 环境变量同步初始管理员(env 是超级管理员的凭据源)。

语义(与 BACKUP_* 播种「仅首次生效」不同:这里每次启动都生效):

  1. 三个变量任一缺失/为空 → 跳过(特性关闭,向后兼容)。
  2. 变量值非法(不过 validate_* 校验)→ warn + 跳过,不阻断启动。
  3. ADMIN_USERNAME 已存在 → 用 ADMIN_PASSWORD 覆盖其密码哈希 (密码一致时跳过重哈希,避免每次启动改写行;覆盖时 bump session_generation,旧会话全部失效需重新登录); 确保 role=‘admin’(恢复被降级/封禁的用户,触发 018 迁移的角色触发器); 邮箱同步为 ADMIN_EMAIL(被其他用户占用时仅告警跳过邮箱)。
  4. ADMIN_USERNAME 不存在 → 尝试创建为 admin。库中已存在其他 admin 时 创建失败(idx_one_admin 部分唯一索引保证全库仅一个 admin),warn 提示。

失败只告警不阻断启动(与 BACKUP_* 播种一致)。