routing.global.ts 783 B

12345678910111213141516171819202122232425262728
  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. if (
  15. name &&
  16. restrictedPages.includes(name) &&
  17. !ability.can('display', name)
  18. ) {
  19. console.error('No right to see this page')
  20. const { redirectToHome } = useRedirect()
  21. redirectToHome()
  22. }
  23. })
  24. })