Multi-role Support Guide
Ce guide explique comment le module multi-rôles permet d’associer plusieurs responsabilités à un utilisateur KoproGo.
Objectifs
Autoriser plusieurs rôles actifs pour un même utilisateur (ex. syndic & comptable).
Permettre de choisir le rôle actif et de l’inclure dans le JWT.
Documenter l’API, la base de données et les parcours BDD associées à l’issue #28.
Modèle de données
users
└── user_roles (jonction)
• user_id (FK users.id)
• role (ENUM: superadmin, syndic, accountant, owner)
• organization_id (FK organizations.id, nullable)
• is_primary (bool)
• created_at / updated_at
Invariants
Au moins une entrée
user_rolespar utilisateur (migration de rétrocompatibilité).Un seul rôle
is_primary = truepar utilisateur (idx_user_roles_primary_per_org).Les tokens JWT portent
role,organization_id,role_id.
API
Endpoint |
Méthode |
Description |
|---|---|---|
|
POST |
Retourne |
|
POST |
Sélectionne un rôle secondaire (JWT mis à jour). |
|
GET |
Renvoie l’utilisateur courant avec la liste des rôles. |
Exemple de réponse login
{
"token": "…",
"refresh_token": "…",
"user": {
"id": "…",
"email": "alice@example.com",
"role": "syndic",
"organization_id": "…",
"roles": [
{ "id": "…", "role": "syndic", "organization_id": "…", "is_primary": true },
{ "id": "…", "role": "accountant", "organization_id": "…", "is_primary": false }
],
"active_role": { "id": "…", "role": "syndic", "organization_id": "…", "is_primary": true }
}
}
Tests et couverture
Unitaires : validations
UserRoleAssignment, conversions DTO,AuthUseCases.Intégration :
PostgresUserRoleRepository(création, switch primary).E2E Backend :
tests/e2e_auth.rs(ajout de second rôle, switch via use-case).BDD :
auth.feature(scénario multi-rôles) aligne l’issue #28.Frontend : store
auth.ts+ composantNavigation.svelte(sélecteur de rôle).
Flux métier type (Gherkin)
Given a coproperty management system
And a user with multiple roles
When I switch to the secondary role
Then my active role should be "accountant"
And the user response should list multiple roles
And the JWT claims should use role "accountant"
And the JWT claims should reference the selected role
Migrations et seeds
Migration
20250130000000_add_user_roles.sql:crée la table
user_rolesbackfill les utilisateurs existants avec
is_primary = true
DatabaseSeeder:garantit l’assignation du rôle superadmin
les utilisateurs de démonstration reçoivent un enregistrement
user_roles
Frontend
authStore.switchRoleappelle/auth/switch-roleavec JWT.Navigation.svelterend le sélecteur (badge de rôle + redirection).Les informations
roles/activeRolesont persistées offline.
Migration
Déployer la migration SQL.
Redémarrer l’API (reconstruit AppState avec
PostgresUserRoleRepository).Vidanger les sessions (les nouveaux tokens incluent
role_id).Vérifier la nouvelle BDD BDD (
make testinclut le scénario multi-rôles).
🎯 Alignement Issue #28
✅ Table
user_roles✅
AuthenticatedUserexposerole_id✅ Use case
switch_active_role✅ UI rôle-switcher
✅ Tests BDD + e2e démontrant le parcours métier