routing.global.ts 724 B

12345678910111213141516171819202122232425
  1. import { useAbility } from '@casl/vue'
  2. import { useRedirect } from '~/composables/utils/useRedirect'
  3. export default defineNuxtRouteMiddleware((to, _) => {
  4. const ability = useAbility()
  5. const candidates = to.matched.map((route) => route.name)
  6. const restrictedPages = ability.rules
  7. .filter((rule) => rule.action.toString() === 'display')
  8. .map((rule) => rule.subject.toString())
  9. candidates.forEach((routeName) => {
  10. const name: string = routeName?.toString() ?? ''
  11. if (
  12. name &&
  13. restrictedPages.includes(name) &&
  14. !ability.can('display', name)
  15. ) {
  16. console.error('No right to see this page')
  17. const { redirectToHome } = useRedirect()
  18. redirectToHome()
  19. }
  20. })
  21. })