feat(rbac) : gate la Messagerie (onglet layout + page /mail) par mail.access
Auto Tag Develop / tag (push) Successful in 8s

This commit is contained in:
Matthieu
2026-06-29 11:56:36 +02:00
parent 4b51a3cc05
commit 7001687194
2 changed files with 9 additions and 5 deletions
+8 -5
View File
@@ -60,13 +60,16 @@ const { sections } = useSidebar()
const isEmployee = computed(() => Boolean(auth.user?.isEmployee))
const isMailVisible = computed(() => {
const roles: string[] = auth.user?.roles ?? []
return roles.includes('ROLE_USER') || roles.includes('ROLE_ADMIN')
})
const { can } = usePermissions()
// L'onglet Messagerie est rendu côté layout (hors sidebar backend) : il faut donc
// reproduire ici le gate de permission. ROLE_ADMIN bypasse via can().
const isMailVisible = computed(() => can('mail.access'))
const { enabled: shareEnabled, ensureLoaded: ensureShareStatus } = useShareStatus()
const isDocumentsVisible = computed(() => shareEnabled.value === true)
// Documents = explorateur de partage : visible si le module est actif ET la
// permission d'accès au partage est accordée (alignement avec le middleware de page).
const isDocumentsVisible = computed(() => shareEnabled.value === true && can('integration.share.access'))
const currentProjectId = computed(() => {
const match = route.path.match(/^\/projects\/(\d+)/)
+1
View File
@@ -6,6 +6,7 @@ const { t } = useI18n()
const router = useRouter()
const route = useRoute()
definePageMeta({ middleware: ['permission'], permission: 'mail.access' })
useHead({ title: t('mail.title') })
// ─── Store ────────────────────────────────────────────────────────────────