| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import { useAbility } from '@casl/vue'
- import { useRedirect } from '~/composables/utils/useRedirect'
- /**
- * Détermine les autorisations d'accès aux pages
- */
- export default defineNuxtRouteMiddleware((to, _) => {
- const ability = useAbility()
- const candidates = to.matched.map((route) => route.name)
- const restrictedPages = ability.rules
- .filter((rule) => rule.action.toString() === 'display')
- .map((rule) => rule.subject.toString())
- candidates.forEach((routeName) => {
- const name: string = routeName?.toString() ?? ''
- // <<- TODO: remove after 2.6 release
- const inDevPages = []
- const runtimeConfig = useRuntimeConfig()
- if (
- runtimeConfig.public.env === 'production' &&
- inDevPages.includes(name)
- ) {
- const { redirectToHome } = useRedirect()
- redirectToHome()
- }
- // ->>
- if (
- name &&
- restrictedPages.includes(name) &&
- !ability.can('display', name)
- ) {
- console.error('No right to see this page')
- const { redirectToHome } = useRedirect()
- redirectToHome()
- }
- })
- })
|