瀏覽代碼

remove permission control

Pan 5 年之前
父節點
當前提交
b6147d33f3

+ 4 - 2
src/layout/components/Sidebar/index.vue

@@ -12,7 +12,7 @@
12 12
         :collapse-transition="false"
13 13
         mode="vertical"
14 14
       >
15
-        <sidebar-item v-for="route in permission_routes" :key="route.path" :item="route" :base-path="route.path" />
15
+        <sidebar-item v-for="route in routes" :key="route.path" :item="route" :base-path="route.path" />
16 16
       </el-menu>
17 17
     </el-scrollbar>
18 18
   </div>
@@ -28,9 +28,11 @@ export default {
28 28
   components: { SidebarItem, Logo },
29 29
   computed: {
30 30
     ...mapGetters([
31
-      'permission_routes',
32 31
       'sidebar'
33 32
     ]),
33
+    routes() {
34
+      return this.$router.options.routes
35
+    },
34 36
     activeMenu() {
35 37
       const route = this.$route
36 38
       const { meta, path } = route

+ 4 - 14
src/permission.js

@@ -26,25 +26,15 @@ router.beforeEach(async(to, from, next) => {
26 26
       next({ path: '/' })
27 27
       NProgress.done()
28 28
     } else {
29
-      // determine whether the user has obtained his permission roles through getInfo
30
-      const hasRoles = store.getters.roles && store.getters.roles.length > 0
31
-      if (hasRoles) {
29
+      const hasGetUserInfo = store.getters.name
30
+      if (hasGetUserInfo) {
32 31
         next()
33 32
       } else {
34 33
         try {
35 34
           // get user info
36
-          // note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
37
-          const { roles } = await store.dispatch('user/getInfo')
35
+          await store.dispatch('user/getInfo')
38 36
 
39
-          // generate accessible routes map based on roles
40
-          const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
41
-
42
-          // dynamically add accessible routes
43
-          router.addRoutes(accessRoutes)
44
-
45
-          // hack method to ensure that addRoutes is complete
46
-          // set the replace: true, so the navigation will not leave a history record
47
-          next({ ...to, replace: true })
37
+          next()
48 38
         } catch (error) {
49 39
           // remove token and go to login page to re-login
50 40
           await store.dispatch('user/resetToken')

+ 1 - 7
src/router/index.js

@@ -88,14 +88,8 @@ export const constantRoutes = [
88 88
         meta: { title: 'Form', icon: 'form' }
89 89
       }
90 90
     ]
91
-  }
92
-]
91
+  },
93 92
 
94
-/**
95
- * asyncRoutes
96
- * the routes that need to be dynamically loaded based on user roles
97
- */
98
-export const asyncRoutes = [
99 93
   {
100 94
     path: '/nested',
101 95
     component: Layout,

+ 1 - 3
src/store/getters.js

@@ -3,8 +3,6 @@ const getters = {
3 3
   device: state => state.app.device,
4 4
   token: state => state.user.token,
5 5
   avatar: state => state.user.avatar,
6
-  name: state => state.user.name,
7
-  roles: state => state.user.roles,
8
-  permission_routes: state => state.permission.routes
6
+  name: state => state.user.name
9 7
 }
10 8
 export default getters

+ 0 - 2
src/store/index.js

@@ -2,7 +2,6 @@ import Vue from 'vue'
2 2
 import Vuex from 'vuex'
3 3
 import getters from './getters'
4 4
 import app from './modules/app'
5
-import permission from './modules/permission'
6 5
 import settings from './modules/settings'
7 6
 import user from './modules/user'
8 7
 
@@ -11,7 +10,6 @@ Vue.use(Vuex)
11 10
 const store = new Vuex.Store({
12 11
   modules: {
13 12
     app,
14
-    permission,
15 13
     settings,
16 14
     user
17 15
   },

+ 0 - 69
src/store/modules/permission.js

@@ -1,69 +0,0 @@
1
-import { asyncRoutes, constantRoutes } from '@/router'
2
-
3
-/**
4
- * Use meta.role to determine if the current user has permission
5
- * @param roles
6
- * @param route
7
- */
8
-function hasPermission(roles, route) {
9
-  if (route.meta && route.meta.roles) {
10
-    return roles.some(role => route.meta.roles.includes(role))
11
-  } else {
12
-    return true
13
-  }
14
-}
15
-
16
-/**
17
- * Filter asynchronous routing tables by recursion
18
- * @param routes asyncRoutes
19
- * @param roles
20
- */
21
-export function filterAsyncRoutes(routes, roles) {
22
-  const res = []
23
-
24
-  routes.forEach(route => {
25
-    const tmp = { ...route }
26
-    if (hasPermission(roles, tmp)) {
27
-      if (tmp.children) {
28
-        tmp.children = filterAsyncRoutes(tmp.children, roles)
29
-      }
30
-      res.push(tmp)
31
-    }
32
-  })
33
-
34
-  return res
35
-}
36
-
37
-const state = {
38
-  routes: [],
39
-  addRoutes: []
40
-}
41
-
42
-const mutations = {
43
-  SET_ROUTES: (state, routes) => {
44
-    state.addRoutes = routes
45
-    state.routes = constantRoutes.concat(routes)
46
-  }
47
-}
48
-
49
-const actions = {
50
-  generateRoutes({ commit }, roles) {
51
-    return new Promise(resolve => {
52
-      let accessedRoutes
53
-      if (roles.includes('admin')) {
54
-        accessedRoutes = asyncRoutes || []
55
-      } else {
56
-        accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
57
-      }
58
-      commit('SET_ROUTES', accessedRoutes)
59
-      resolve(accessedRoutes)
60
-    })
61
-  }
62
-}
63
-
64
-export default {
65
-  namespaced: true,
66
-  state,
67
-  mutations,
68
-  actions
69
-}

+ 2 - 14
src/store/modules/user.js

@@ -5,8 +5,7 @@ import { resetRouter } from '@/router'
5 5
 const state = {
6 6
   token: getToken(),
7 7
   name: '',
8
-  avatar: '',
9
-  roles: []
8
+  avatar: ''
10 9
 }
11 10
 
12 11
 const mutations = {
@@ -18,9 +17,6 @@ const mutations = {
18 17
   },
19 18
   SET_AVATAR: (state, avatar) => {
20 19
     state.avatar = avatar
21
-  },
22
-  SET_ROLES: (state, roles) => {
23
-    state.roles = roles
24 20
   }
25 21
 }
26 22
 
@@ -50,14 +46,8 @@ const actions = {
50 46
           reject('Verification failed, please Login again.')
51 47
         }
52 48
 
53
-        const { roles, name, avatar } = data
54
-
55
-        // roles must be a non-empty array
56
-        if (!roles || roles.length <= 0) {
57
-          reject('getInfo: roles must be a non-null array!')
58
-        }
49
+        const { name, avatar } = data
59 50
 
60
-        commit('SET_ROLES', roles)
61 51
         commit('SET_NAME', name)
62 52
         commit('SET_AVATAR', avatar)
63 53
         resolve(data)
@@ -72,7 +62,6 @@ const actions = {
72 62
     return new Promise((resolve, reject) => {
73 63
       logout(state.token).then(() => {
74 64
         commit('SET_TOKEN', '')
75
-        commit('SET_ROLES', [])
76 65
         removeToken()
77 66
         resetRouter()
78 67
         resolve()
@@ -86,7 +75,6 @@ const actions = {
86 75
   resetToken({ commit }) {
87 76
     return new Promise(resolve => {
88 77
       commit('SET_TOKEN', '')
89
-      commit('SET_ROLES', [])
90 78
       removeToken()
91 79
       resolve()
92 80
     })

+ 1 - 3
src/views/dashboard/index.vue

@@ -1,7 +1,6 @@
1 1
 <template>
2 2
   <div class="dashboard-container">
3 3
     <div class="dashboard-text">name: {{ name }}</div>
4
-    <div class="dashboard-text">roles: <span v-for="role in roles" :key="role">{{ role }}</span></div>
5 4
   </div>
6 5
 </template>
7 6
 
@@ -12,8 +11,7 @@ export default {
12 11
   name: 'Dashboard',
13 12
   computed: {
14 13
     ...mapGetters([
15
-      'name',
16
-      'roles'
14
+      'name'
17 15
     ])
18 16
   }
19 17
 }