routing.global.ts 588 B

1234567891011121314151617181920
  1. import { useAbility } from '@casl/vue'
  2. export default defineNuxtRouteMiddleware((to, _) => {
  3. const ability = useAbility()
  4. console.log(to)
  5. const candidates = to.matched.map((route) => route.name)
  6. const pages = 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 (name && pages.includes(name) && !ability.can('display', name)) {
  12. console.error('No right to see this page')
  13. navigateTo('/')
  14. }
  15. })
  16. })