routing.global.ts 571 B

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