Authentification
Documentation / Authentification / Modèle utilisateur

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 (algorithme de la PasswordConfig) — jamais en clair
is_activeboolCompte actif
is_adminboolRang admin : accès au panneau, avec ses droits propres (table × colonne)
is_dirigeantboolRang dirigeant : tous les droits sur les modèles du projet
is_superuserboolRang superuser : accès complet
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 = "4.0.0", features = ["postgres", "big-pk"] }    # Pk = i64
runique = { version = "4.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é depuis l'adminRefusé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é se fait depuis l'admin, par un compte qui en a le droit.
  • 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

L'accès au panneau d'administration se lit sur le compte connecté (request.user) : can_access_admin() répond vrai pour un rang admin, dirigeant ou superuser, ou pour un membre d'un groupe qui ouvre l'admin. Voir Middlewares & CurrentUser.