Admin Runique

Création d'utilisateur via le panel admin

Flux complet

Quand l'admin crée un utilisateur via le panel, le cycle est le suivant :

Admin remplit le formulaire
        ↓
Compte créé en base (is_active = false)
Hash aléatoire injecté dans le champ password
        ↓
Email de reset envoyé à l'utilisateur
        ↓
L'utilisateur clique le lien
Définit son mot de passe
        ↓
update_password → is_active = true
        ↓
L'utilisateur peut se connecter

Ce que fait le framework automatiquement

ÉtapeComportement builtin
Création via adminis_active = false — le compte est inactif à la création
Champ passwordHash aléatoire injecté — l'utilisateur ne connaît pas ce mot de passe
EmailLien de reset envoyé à l'adresse fournie dans le formulaire
Définition du mot de passeis_active passe à true automatiquement via update_password
Connexionauth_login() bloque les comptes avec is_active = false

Formulaire de création builtin — `UserAdminCreateForm`

Le formulaire fourni par Runique (runique::admin::UserAdminCreateForm) expose :

ChampTypeDescription
usernameTexte requisNom d'utilisateur (min. 3 caractères)
emailEmail requisAdresse de contact + destinataire de l'email de reset
passwordCachéHash aléatoire injecté automatiquement — non visible dans l'interface
is_staffBooléenAccès lecture au panel admin
is_superuserBooléenAccès complet admin

is_active n'est pas dans le formulaire — le compte est toujours créé inactif.


Configuration dans `admin!{}`

admin! {
    users: eihwaz_users::Model => MyForm {
        title: "Utilisateurs",
        permissions: ["admin"],
        create_form: runique::admin::UserAdminCreateForm,
        edit_form: crate::formulaire::UserEditForm,
    }
}

Le champ create_form: indique au daemon d'utiliser UserAdminCreateForm à la création et d'activer le flag inject_password sur la ressource.


Envoi de l'email

L'email est envoyé si le mailer est configuré (variables SMTP_* dans .env).

Sans mailer (développement), le lien de reset est affiché dans un flash message.

Le template email par défaut est admin/user_created_email.html. Il peut être surchargé via AdminConfig::reset_password_email_template("mon_template/email.html").

Contexte Tera disponible dans le template :

VariableValeur
usernameNom d'utilisateur
emailAdresse email
reset_urlLien complet de reset (absolu si reset_password_url configuré)

URL de reset

L'URL construite suit le schéma :

{base_url}/reset-password/{token}/{encrypted_email}

En production, configurer reset_password_url dans le builder pour générer une URL absolue :

.with_admin(|a| a
    .reset_password_url("https://monsite.fr/reset-password")
)

Sans cette configuration, l'URL est construite depuis le header Host de la requête HTTP (http://{host}/reset-password/...).


Modèle custom

Si le projet utilise son propre modèle utilisateur (pas eihwaz_users), il doit implémenter UserEntity et gérer is_active dans update_password lui-même.

auth_login() utilise BuiltinUserEntity — les projets avec un modèle custom appellent login() directement et contrôlent la vérification is_active dans leur propre handler.


Revenir au sommaire