routing.global.ts 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { useAbility } from '@casl/vue'
  2. import { useRedirect } from '~/composables/utils/useRedirect'
  3. /**
  4. * Détermine les autorisations d'accès aux pages
  5. */
  6. export default defineNuxtRouteMiddleware((to, _) => {
  7. const ability = useAbility()
  8. const candidates = to.matched.map((route) => route.name)
  9. const restrictedPages = ability.rules
  10. .filter((rule) => rule.action.toString() === 'display')
  11. .map((rule) => rule.subject.toString())
  12. candidates.forEach((routeName) => {
  13. const name: string = routeName?.toString() ?? ''
  14. // <<- TODO: remove after 2.6 release
  15. const runtimeConfig = useRuntimeConfig()
  16. if (
  17. runtimeConfig.public.env === 'production' &&
  18. name === 'cmf_licence_page'
  19. ) {
  20. const { redirectToHome } = useRedirect()
  21. redirectToHome()
  22. }
  23. // ->>
  24. if (
  25. name &&
  26. restrictedPages.includes(name) &&
  27. !ability.can('display', name)
  28. ) {
  29. console.error('No right to see this page')
  30. const { redirectToHome } = useRedirect()
  31. redirectToHome()
  32. }
  33. })
  34. })