feat: Attribution de rôles multiples par utilisateur

Les utilisateurs Classeo étaient limités à un seul rôle, alors que
dans la réalité scolaire un directeur peut aussi être enseignant,
ou un parent peut avoir un rôle vie scolaire. Cette limitation
obligeait à créer des comptes distincts par fonction.

Le modèle User supporte désormais plusieurs rôles simultanés avec
basculement via le header. L'admin peut attribuer/retirer des rôles
depuis l'interface de gestion, avec des garde-fous : pas d'auto-
destitution, pas d'escalade de privilèges (seul SUPER_ADMIN peut
attribuer SUPER_ADMIN), vérification du statut actif pour le
switch de rôle, et TTL explicite sur le cache de rôle actif.
This commit is contained in:
2026-02-10 07:57:43 +01:00
parent 9ccad77bf0
commit e930c505df
93 changed files with 2527 additions and 165 deletions

View File

@@ -69,16 +69,11 @@ test.describe('Pedagogy - Grading Mode Configuration (Story 2.4)', () => {
await expect(page).toHaveURL(/\/admin\/pedagogy/, { timeout: 10000 });
});
test('pedagogy card is visible on admin dashboard', async ({ page, browserName }) => {
// Svelte 5 delegated onclick is not triggered by Playwright click on webkit
test.skip(browserName === 'webkit', 'Demo role switcher click not supported on webkit');
test('pedagogy card is visible on admin dashboard', async ({ page }) => {
await loginAsAdmin(page);
// Switch to admin view in demo dashboard
// Authenticated admin sees admin dashboard directly via role context
await page.goto(`${ALPHA_URL}/dashboard`);
const adminButton = page.getByRole('button', { name: /admin/i });
await adminButton.click();
await expect(page.getByRole('heading', { name: /administration/i })).toBeVisible({
timeout: 10000