Kaynağa Gözat

修改 ability使用abilityBuilder

oransheep 2 yıl önce
ebeveyn
işleme
e50bc8ef21

+ 17 - 35
resources/js/src/libs/acl/ability.js

@@ -1,5 +1,4 @@
-import { Ability } from '@casl/ability'
-import { initialAbility } from './config'
+import { createMongoAbility, AbilityBuilder } from '@casl/ability'
 
 //  Read ability from localStorage
 // * Handles auto fetching previous abilities if already logged in user
@@ -8,46 +7,29 @@ import { initialAbility } from './config'
 const userData = JSON.parse(localStorage.getItem('userData'))
 const existingAbility = userData ? userData.ability : null
 
+const {
+  can,
+  cannot,
+  build,
+  rules,
+} = new AbilityBuilder(createMongoAbility)
+
 export function getExistingAbility(userAbility) {
   switch (userAbility) {
     case 'visitor':
-      return [
-        {
-          action: 'read',
-          subject: 'basic',
-        },
-      ]
+      can('read', 'all')
+      cannot('read', 'management')
+      break
 
     case 'manager':
-      return [
-        {
-          action: 'read',
-          subject: 'basic',
-        },
-        {
-          action: 'read',
-          subject: 'management',
-        },
-      ]
+      can('read', 'all')
+      break
 
     default:
-      return null
+      break
   }
+  return rules
 }
 
-// const { can, cannot, build } = new AbilityBuilder(createMongoAbility)
-// can('read', 'all')
-
-// switch (userData.ability) {
-//   case 'manager':
-//     can('read', 'all')
-//     break
-
-//   default:
-//     can('read', 'all')
-//     cannot('read', 'permission')
-//     break
-// }
-// const ability = build()
-
-export default new Ability(getExistingAbility(existingAbility) || initialAbility)
+getExistingAbility(existingAbility)
+export default build()

+ 2 - 1
resources/js/src/views/Login.vue

@@ -125,7 +125,7 @@ import { togglePasswordVisibility } from '@core/mixins/ui/forms'
 import store from '@/store/index'
 import ToastificationContent from '@core/components/toastification/ToastificationContent.vue'
 import useJwt from '@/auth/jwt/useJwt'
-import { getExistingAbility } from '../libs/acl/ability'
+import { getExistingAbility, getAbility } from '../libs/acl/ability'
 
 export default {
   components: {
@@ -188,6 +188,7 @@ export default {
             .then(res => {
               useJwt.setToken(res.data.token)
               localStorage.setItem('userData', res.data.userData)
+
               this.$ability.update(getExistingAbility(JSON.parse(res.data.userData).ability))
 
               if (this.$route.query.redirect) {