Przeglądaj źródła

fix routing middleware

Olivier Massot 1 rok temu
rodzic
commit
7f0fa8f4ac
2 zmienionych plików z 15 dodań i 7 usunięć
  1. 9 4
      middleware/routing.global.ts
  2. 6 3
      services/rights/abilityBuilder.ts

+ 9 - 4
middleware/routing.global.ts

@@ -1,20 +1,25 @@
 import { useAbility } from '@casl/vue'
+import { useRedirect } from '~/composables/utils/useRedirect'
 
 export default defineNuxtRouteMiddleware((to, _) => {
   const ability = useAbility()
-
   const candidates = to.matched.map((route) => route.name)
 
-  const pages = ability.rules
+  const restrictedPages = ability.rules
     .filter((rule) => rule.action.toString() === 'display')
     .map((rule) => rule.subject.toString())
 
   candidates.forEach((routeName) => {
     const name: string = routeName?.toString() ?? ''
 
-    if (name && pages.includes(name) && !ability.can('display', name)) {
+    if (
+      name &&
+      restrictedPages.includes(name) &&
+      !ability.can('display', name)
+    ) {
       console.error('No right to see this page')
-      navigateTo('/')
+      const { redirectToHome } = useRedirect()
+      redirectToHome()
     }
   })
 })

+ 6 - 3
services/rights/abilityBuilder.ts

@@ -91,9 +91,12 @@ class AbilityBuilder {
           conditions = [conditions]
         }
 
-        if (this.hasConfigAbility(conditions as Array<Condition>, subject)) {
-          abilitiesByConfig.push({ action, subject })
-        }
+        const hasAbility = this.hasConfigAbility(
+          conditions as Array<Condition>,
+          subject,
+        )
+
+        abilitiesByConfig.push({ action, subject, inverted: !hasAbility })
       },
     )