Bladeren bron

remove permission control

Pan 5 jaren geleden
bovenliggende
commit
b6147d33f3

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

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

+ 4 - 14
src/permission.js

@@ -26,25 +26,15 @@ router.beforeEach(async(to, from, next) => {
26
       next({ path: '/' })
26
       next({ path: '/' })
27
       NProgress.done()
27
       NProgress.done()
28
     } else {
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
         next()
31
         next()
33
       } else {
32
       } else {
34
         try {
33
         try {
35
           // get user info
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
         } catch (error) {
38
         } catch (error) {
49
           // remove token and go to login page to re-login
39
           // remove token and go to login page to re-login
50
           await store.dispatch('user/resetToken')
40
           await store.dispatch('user/resetToken')

+ 1 - 7
src/router/index.js

@@ -88,14 +88,8 @@ export const constantRoutes = [
88
         meta: { title: 'Form', icon: 'form' }
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
     path: '/nested',
94
     path: '/nested',
101
     component: Layout,
95
     component: Layout,

+ 1 - 3
src/store/getters.js

@@ -3,8 +3,6 @@ const getters = {
3
   device: state => state.app.device,
3
   device: state => state.app.device,
4
   token: state => state.user.token,
4
   token: state => state.user.token,
5
   avatar: state => state.user.avatar,
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
 export default getters
8
 export default getters

+ 0 - 2
src/store/index.js

@@ -2,7 +2,6 @@ import Vue from 'vue'
2
 import Vuex from 'vuex'
2
 import Vuex from 'vuex'
3
 import getters from './getters'
3
 import getters from './getters'
4
 import app from './modules/app'
4
 import app from './modules/app'
5
-import permission from './modules/permission'
6
 import settings from './modules/settings'
5
 import settings from './modules/settings'
7
 import user from './modules/user'
6
 import user from './modules/user'
8
 
7
 
@@ -11,7 +10,6 @@ Vue.use(Vuex)
11
 const store = new Vuex.Store({
10
 const store = new Vuex.Store({
12
   modules: {
11
   modules: {
13
     app,
12
     app,
14
-    permission,
15
     settings,
13
     settings,
16
     user
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
 const state = {
5
 const state = {
6
   token: getToken(),
6
   token: getToken(),
7
   name: '',
7
   name: '',
8
-  avatar: '',
9
-  roles: []
8
+  avatar: ''
10
 }
9
 }
11
 
10
 
12
 const mutations = {
11
 const mutations = {
@@ -18,9 +17,6 @@ const mutations = {
18
   },
17
   },
19
   SET_AVATAR: (state, avatar) => {
18
   SET_AVATAR: (state, avatar) => {
20
     state.avatar = avatar
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
           reject('Verification failed, please Login again.')
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
         commit('SET_NAME', name)
51
         commit('SET_NAME', name)
62
         commit('SET_AVATAR', avatar)
52
         commit('SET_AVATAR', avatar)
63
         resolve(data)
53
         resolve(data)
@@ -72,7 +62,6 @@ const actions = {
72
     return new Promise((resolve, reject) => {
62
     return new Promise((resolve, reject) => {
73
       logout(state.token).then(() => {
63
       logout(state.token).then(() => {
74
         commit('SET_TOKEN', '')
64
         commit('SET_TOKEN', '')
75
-        commit('SET_ROLES', [])
76
         removeToken()
65
         removeToken()
77
         resetRouter()
66
         resetRouter()
78
         resolve()
67
         resolve()
@@ -86,7 +75,6 @@ const actions = {
86
   resetToken({ commit }) {
75
   resetToken({ commit }) {
87
     return new Promise(resolve => {
76
     return new Promise(resolve => {
88
       commit('SET_TOKEN', '')
77
       commit('SET_TOKEN', '')
89
-      commit('SET_ROLES', [])
90
       removeToken()
78
       removeToken()
91
       resolve()
79
       resolve()
92
     })
80
     })

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

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