Authentification

Modèle utilisateur

Modèle built-in

Runique inclut un modèle utilisateur prêt à l'emploi, sans aucune configuration.

Table générée : eihwaz_users

ChampTypeDescription
idPkClé primaire (i32 par défaut, i64 avec big-pk, Uuid avec pk-uuid)
usernameStringNom d'utilisateur unique
emailStringAdresse email
passwordStringHash Argon2 — jamais en clair
is_activeboolCompte actif
is_staffboolAccès au panneau admin (limité)
is_superuserboolAccès complet, bypass toutes les règles
created_atdatetimeDate de création
updated_atdatetimeDate de mise à jour
activated_atdatetimeActivation par le propriétaire (vide tant que le compte est en attente)

Pour créer le premier superutilisateur :

runique create-superuser

Clé primaire i64 ou UUID

Par défaut, la clé primaire est un i32. Pour passer à i64 ou Uuid — une seule feature à la fois, activer les deux ensemble est une erreur de compilation volontaire :

# Cargo.toml du projet
runique = { version = "3.0.0", features = ["postgres", "big-pk"] }    # Pk = i64
runique = { version = "3.0.0", features = ["postgres", "pk-uuid"] }   # Pk = Uuid (Uuid::now_v7())

Le choix doit être fait avant la première migration — voir DSL model! & extend! pour le détail complet (types compatibles, contraintes FK, changement de mode après coup).


États d'un compte

eihwaz_users est le seul modèle utilisateur : pour y ajouter des champs, utiliser extend!{ table: "eihwaz_users", ... }.

Deux colonnes décrivent l'état d'un compte : is_active (est-il actif ?) et activated_at (quand son propriétaire l'a-t-il activé, via le lien reçu par email ?).

is_activeactivated_atÉtatConnexion« Mot de passe oublié »
falsevideEn attente — créé, jamais activéRefuséeLien qui active le compte
truerempliActifAutoriséeLien de réinitialisation
falserempliDésactivé par le staffRefuséeEmail « compte bloqué », sans lien
truevideImpossible — refusé par la base——
  • La première activation appartient au propriétaire de l'email : un admin ne peut pas cocher is_active sur un compte en attente.
  • Désactiver et réactiver un compte déjà activé est le rôle du staff (can_update sur users).
  • Changer de mot de passe ne réactive jamais un compte désactivé.
  • La page « mot de passe oublié » répond la même chose quel que soit l'état ou l'existence du compte.
  • Pour annuler une invitation (compte en attente), supprimer le compte.

La garantie « pas de is_active sans activated_at » est posée en base : une contrainte CHECK créée avec la table eihwaz_users, sur les trois moteurs. Elle s'applique aussi au SQL brut.

Côté code, le modèle implémente le trait RuniqueUser :

MéthodeDescription
can_sign_in()is_active et activated_at rempli
can_access_admin()can_sign_in() et (is_staff ou is_superuser)