浏览代码

新增 登入時更新 ability

oransheep 2 年之前
父节点
当前提交
0a25cd12ea
共有 3 个文件被更改,包括 40 次插入61 次删除
  1. 5 2
      resources/js/src/layouts/components/Navbar.vue
  2. 33 29
      resources/js/src/libs/acl/ability.js
  3. 2 30
      resources/js/src/views/Login.vue

+ 5 - 2
resources/js/src/layouts/components/Navbar.vue

@@ -22,9 +22,9 @@
             <p class="user-name font-weight-bolder mb-0" >
               {{ getName() }}
             </p>
-            <span class="user-status">{{ getEmail() }}</span>
+            <span class="user-status">{{ getAbility() }}</span>
           </div>
-          <b-avatar size="40" variant="light-primary" badge :src="require('@/assets/images/avatars/13-small.png')"
+          <b-avatar size="40" variant="light-primary" badge :src="require('@/assets/images/avatars/1-small.png')"
             class="badge-minimal" badge-variant="success" />
         </template>
 
@@ -91,6 +91,9 @@ export default {
     getEmail() {
       return JSON.parse(localStorage.getItem('userData')).email
     },
+    getAbility() {
+      return JSON.parse(localStorage.getItem('userData')).ability
+    },
     logout() {
       useJwt.logout()
         // eslint-disable-next-line no-unused-vars

+ 33 - 29
resources/js/src/libs/acl/ability.js

@@ -8,35 +8,39 @@ import { initialAbility } from './config'
 const userData = JSON.parse(localStorage.getItem('userData'))
 // const existingAbility = userData ? userData.ability : null
 
-let existingAbility = []
-if (userData) {
-  if (userData.ability === 'manager') {
-    existingAbility = [
-      {
-        action: 'read',
-        subject: 'home',
-      },
-      {
-        action: 'read',
-        subject: 'second-page',
-      },
-      {
-        action: 'read',
-        subject: 'permission',
-      },
-    ]
-  } else {
-    existingAbility = [
-      {
-        action: 'read',
-        subject: 'home',
-      },
-      {
-        action: 'read',
-        subject: 'second-page',
-      },
-    ]
+export function getExistingAbility(userAbility) {
+  switch (userAbility) {
+    case 'visitor':
+      return [
+        {
+          action: 'read',
+          subject: 'home',
+        },
+        {
+          action: 'read',
+          subject: 'second-page',
+        },
+      ]
+
+    case 'manager':
+      return [
+        {
+          action: 'read',
+          subject: 'home',
+        },
+        {
+          action: 'read',
+          subject: 'second-page',
+        },
+        {
+          action: 'read',
+          subject: 'permission',
+        },
+      ]
+
+    default:
+      return null
   }
 }
 
-export default new Ability(existingAbility || initialAbility)
+export default new Ability(getExistingAbility(userData.ability) || initialAbility)

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

@@ -125,6 +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'
 
 export default {
   components: {
@@ -187,36 +188,7 @@ export default {
             .then(res => {
               useJwt.setToken(res.data.token)
               localStorage.setItem('userData', res.data.userData)
-
-              // let existingAbility = []
-              // if (res.data.userData.ability === 'manager') {
-              //   existingAbility = [
-              //     {
-              //       action: 'read',
-              //       subject: 'home',
-              //     },
-              //     {
-              //       action: 'read',
-              //       subject: 'second-page',
-              //     },
-              //     {
-              //       action: 'read',
-              //       subject: 'permission',
-              //     },
-              //   ]
-              // } else {
-              //   existingAbility = [
-              //     {
-              //       action: 'read',
-              //       subject: 'home',
-              //     },
-              //     {
-              //       action: 'read',
-              //       subject: 'second-page',
-              //     },
-              //   ]
-              // }
-              // this.$ability.update(existingAbility)
+              this.$ability.update(getExistingAbility(JSON.parse(res.data.userData).ability))
 
               if (this.$route.query.redirect) {
                 this.$router.push(this.$route.query.redirect)