diff --git a/frontend/shared/composables/useModules.ts b/frontend/shared/composables/useModules.ts index 73d7550..20ca187 100644 --- a/frontend/shared/composables/useModules.ts +++ b/frontend/shared/composables/useModules.ts @@ -2,14 +2,23 @@ * Composable de lecture des modules actifs (source : `/api/modules`). * * State singleton au niveau module : `useSidebar` suit la meme convention. - * Chargement idempotent via le flag `loaded`, reset explicite au logout - * (voir pages/logout.vue). + * Chargement idempotent via le flag `loaded`, reset automatique au logout + * via `onAuthSessionCleared` (cf. CLAUDE.md : « composables avec state + * singleton doivent etre reinitialises au logout »). */ import { ref } from 'vue' +import { onAuthSessionCleared } from '~/shared/stores/auth' const activeModuleIds = ref([]) const loaded = ref(false) +function resetModulesState(): void { + activeModuleIds.value = [] + loaded.value = false +} + +onAuthSessionCleared(resetModulesState) + export function useModules() { async function loadModules() { try { @@ -35,8 +44,7 @@ export function useModules() { } function resetModules() { - activeModuleIds.value = [] - loaded.value = false + resetModulesState() } return { diff --git a/frontend/shared/composables/useSidebar.ts b/frontend/shared/composables/useSidebar.ts index adbdbbf..1596ae1 100644 --- a/frontend/shared/composables/useSidebar.ts +++ b/frontend/shared/composables/useSidebar.ts @@ -1,10 +1,23 @@ import { ref } from 'vue' import type { SidebarSection } from '~/shared/types' +import { onAuthSessionCleared } from '~/shared/stores/auth' const sections = ref([]) const disabledRoutes = ref([]) const loaded = ref(false) +function resetSidebarState(): void { + sections.value = [] + disabledRoutes.value = [] + loaded.value = false +} + +// Auto-enregistrement singleton : purge la sidebar sur 401/logout pour +// eviter qu'un nouvel utilisateur logue sur le meme onglet voie transitoirement +// les items de l'ancienne session (cf. CLAUDE.md : « composables avec state +// singleton doivent etre reinitialises au logout »). +onAuthSessionCleared(resetSidebarState) + export function useSidebar() { async function loadSidebar() { try { @@ -31,9 +44,7 @@ export function useSidebar() { } function resetSidebar() { - sections.value = [] - disabledRoutes.value = [] - loaded.value = false + resetSidebarState() } return {