Browse Source

refactor: remove_permission-control

Pan 7 years ago
parent
commit
9abd44f562

+ 3 - 7
src/permission.js

4
 import 'nprogress/nprogress.css'// Progress 进度条样式
4
 import 'nprogress/nprogress.css'// Progress 进度条样式
5
 import { getToken } from '@/utils/auth' // 验权
5
 import { getToken } from '@/utils/auth' // 验权
6
 
6
 
7
-const whiteList = ['/login']
7
+const whiteList = ['/login'] // 不重定向白名单
8
 router.beforeEach((to, from, next) => {
8
 router.beforeEach((to, from, next) => {
9
   NProgress.start()
9
   NProgress.start()
10
   if (getToken()) {
10
   if (getToken()) {
12
       next({ path: '/' })
12
       next({ path: '/' })
13
     } else {
13
     } else {
14
       if (store.getters.roles.length === 0) {
14
       if (store.getters.roles.length === 0) {
15
-        store.dispatch('GetInfo').then(res => {
16
-          const roles = res.data.role
17
-          store.dispatch('GenerateRoutes', { roles }).then(() => {
18
-            router.addRoutes(store.getters.addRouters)
19
-            next({ ...to })
20
-          })
15
+        store.dispatch('GetInfo').then(res => { // 拉取用户信息
16
+          next()
21
         })
17
         })
22
       } else {
18
       } else {
23
         next()
19
         next()

+ 15 - 16
src/router/index.js

8
 
8
 
9
 Vue.use(Router)
9
 Vue.use(Router)
10
 
10
 
11
- /**
12
-  * icon : the icon show in the sidebar
13
-  * hidden : if `hidden:true` will not show in the sidebar
14
-  * redirect : if `redirect:noredirect` will not redirct in the levelbar
15
-  * noDropdown : if `noDropdown:true` will not has submenu in the sidebar
16
-  * meta : `{ role: ['admin'] }`  will control the page role
17
-  **/
11
+/**
12
+* icon : the icon show in the sidebar
13
+* hidden : if `hidden:true` will not show in the sidebar
14
+* redirect : if `redirect:noredirect` will not redirct in the levelbar
15
+* noDropdown : if `noDropdown:true` will not has submenu in the sidebar
16
+* meta : `{ role: ['admin'] }`  will control the page role
17
+**/
18
 export const constantRouterMap = [
18
 export const constantRouterMap = [
19
   { path: '/login', component: _import('login/index'), hidden: true },
19
   { path: '/login', component: _import('login/index'), hidden: true },
20
   { path: '/404', component: _import('404'), hidden: true },
20
   { path: '/404', component: _import('404'), hidden: true },
25
     name: 'Dashboard',
25
     name: 'Dashboard',
26
     hidden: true,
26
     hidden: true,
27
     children: [{ path: 'dashboard', component: _import('dashboard/index') }]
27
     children: [{ path: 'dashboard', component: _import('dashboard/index') }]
28
-  }
29
-]
30
-
31
-export default new Router({
32
-  // mode: 'history', //后端支持可开
33
-  scrollBehavior: () => ({ y: 0 }),
34
-  routes: constantRouterMap
35
-})
28
+  },
36
 
29
 
37
-export const asyncRouterMap = [
38
   {
30
   {
39
     path: '/example',
31
     path: '/example',
40
     component: Layout,
32
     component: Layout,
57
 
49
 
58
   { path: '*', redirect: '/404', hidden: true }
50
   { path: '*', redirect: '/404', hidden: true }
59
 ]
51
 ]
52
+
53
+export default new Router({
54
+  // mode: 'history', //后端支持可开
55
+  scrollBehavior: () => ({ y: 0 }),
56
+  routes: constantRouterMap
57
+})
58
+

+ 1 - 3
src/store/getters.js

3
   token: state => state.user.token,
3
   token: state => state.user.token,
4
   avatar: state => state.user.avatar,
4
   avatar: state => state.user.avatar,
5
   name: state => state.user.name,
5
   name: state => state.user.name,
6
-  roles: state => state.user.roles,
7
-  permission_routers: state => state.permission.routers,
8
-  addRouters: state => state.permission.addRouters
6
+  roles: state => state.user.roles
9
 }
7
 }
10
 export default getters
8
 export default getters

+ 1 - 3
src/store/index.js

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

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

1
-import { asyncRouterMap, constantRouterMap } from '@/router/index'
2
-
3
-/**
4
- * 通过meta.role判断是否与当前用户权限匹配
5
- * @param roles
6
- * @param route
7
- */
8
-function hasPermission(roles, route) {
9
-  if (route.meta && route.meta.role) {
10
-    return roles.some(role => route.meta.role.indexOf(role) >= 0)
11
-  } else {
12
-    return true
13
-  }
14
-}
15
-
16
-/**
17
- * 递归过滤异步路由表,返回符合用户角色权限的路由表
18
- * @param asyncRouterMap
19
- * @param roles
20
- */
21
-function filterAsyncRouter(asyncRouterMap, roles) {
22
-  const accessedRouters = asyncRouterMap.filter(route => {
23
-    if (hasPermission(roles, route)) {
24
-      if (route.children && route.children.length) {
25
-        route.children = filterAsyncRouter(route.children, roles)
26
-      }
27
-      return true
28
-    }
29
-    return false
30
-  })
31
-  return accessedRouters
32
-}
33
-
34
-const permission = {
35
-  state: {
36
-    routers: constantRouterMap,
37
-    addRouters: []
38
-  },
39
-  mutations: {
40
-    SET_ROUTERS: (state, routers) => {
41
-      state.addRouters = routers
42
-      state.routers = constantRouterMap.concat(routers)
43
-    }
44
-  },
45
-  actions: {
46
-    GenerateRoutes({ commit }, data) {
47
-      return new Promise(resolve => {
48
-        const { roles } = data
49
-        let accessedRouters
50
-        if (roles.indexOf('admin') >= 0) {
51
-          accessedRouters = asyncRouterMap
52
-        } else {
53
-          accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
54
-        }
55
-        commit('SET_ROUTERS', accessedRouters)
56
-        resolve()
57
-      })
58
-    }
59
-  }
60
-}
61
-
62
-export default permission

+ 4 - 5
src/views/layout/Sidebar.vue

1
 <template>
1
 <template>
2
   <el-menu mode="vertical" theme="dark" :default-active="$route.path">
2
   <el-menu mode="vertical" theme="dark" :default-active="$route.path">
3
-    <sidebar-item :routes='permission_routers'></sidebar-item>
3
+    <sidebar-item :routes="routes"></sidebar-item>
4
   </el-menu>
4
   </el-menu>
5
 </template>
5
 </template>
6
 
6
 
7
 <script>
7
 <script>
8
-import { mapGetters } from 'vuex'
9
 import SidebarItem from './SidebarItem'
8
 import SidebarItem from './SidebarItem'
10
 export default {
9
 export default {
11
   components: { SidebarItem },
10
   components: { SidebarItem },
12
   computed: {
11
   computed: {
13
-    ...mapGetters([
14
-      'permission_routers'
15
-    ])
12
+    routes() {
13
+      return this.$router.options.routes
14
+    }
16
   }
15
   }
17
 }
16
 }
18
 </script>
17
 </script>

+ 13 - 11
src/views/login/index.vue

2
   <div class="login-container">
2
   <div class="login-container">
3
     <el-form autoComplete="on" :model="loginForm" :rules="loginRules" ref="loginForm" label-position="left" label-width="0px"
3
     <el-form autoComplete="on" :model="loginForm" :rules="loginRules" ref="loginForm" label-position="left" label-width="0px"
4
       class="card-box login-form">
4
       class="card-box login-form">
5
-      <h3 class="title">系统登录</h3>
6
-       <el-form-item prop="username">
5
+      <h3 class="title">vue-element-admin</h3>
6
+      <el-form-item prop="username">
7
         <span class="svg-container svg-container_login">
7
         <span class="svg-container svg-container_login">
8
           <icon-svg icon-class="yonghuming" />
8
           <icon-svg icon-class="yonghuming" />
9
         </span>
9
         </span>
10
-        <el-input name="username" type="text" v-model="loginForm.username" autoComplete="on" placeholder="邮箱" />
10
+        <el-input name="username" type="text" v-model="loginForm.username" autoComplete="on" placeholder="username" />
11
       </el-form-item>
11
       </el-form-item>
12
       <el-form-item prop="password">
12
       <el-form-item prop="password">
13
         <span class="svg-container">
13
         <span class="svg-container">
14
-          <icon-svg icon-class="mima" ></icon-svg>
14
+          <icon-svg icon-class="mima"></icon-svg>
15
         </span>
15
         </span>
16
         <el-input name="password" type="password" @keyup.enter.native="handleLogin" v-model="loginForm.password" autoComplete="on"
16
         <el-input name="password" type="password" @keyup.enter.native="handleLogin" v-model="loginForm.password" autoComplete="on"
17
-          placeholder="密码"></el-input>
17
+          placeholder="password"></el-input>
18
       </el-form-item>
18
       </el-form-item>
19
       <el-form-item>
19
       <el-form-item>
20
         <el-button type="primary" style="width:100%;" :loading="loading" @click.native.prevent="handleLogin">
20
         <el-button type="primary" style="width:100%;" :loading="loading" @click.native.prevent="handleLogin">
21
-          登录
21
+          Sign in
22
         </el-button>
22
         </el-button>
23
       </el-form-item>
23
       </el-form-item>
24
-      <div class='tips'>账号:admin 密码随便填</div>
25
-      <div class='tips'>账号:editor  密码随便填</div>
24
+      <div class='tips'>
25
+        <span style="margin-right:20px;">username: admin</span>
26
+        </span> password: admin</span>
27
+      </div>
26
     </el-form>
28
     </el-form>
27
   </div>
29
   </div>
28
 </template>
30
 </template>
41
       }
43
       }
42
     }
44
     }
43
     const validatePass = (rule, value, callback) => {
45
     const validatePass = (rule, value, callback) => {
44
-      if (value.length < 6) {
45
-        callback(new Error('密码不能小于6位'))
46
+      if (value.length < 5) {
47
+        callback(new Error('密码不能小于5位'))
46
       } else {
48
       } else {
47
         callback()
49
         callback()
48
       }
50
       }
50
     return {
52
     return {
51
       loginForm: {
53
       loginForm: {
52
         username: 'admin',
54
         username: 'admin',
53
-        password: '111111'
55
+        password: 'admin'
54
       },
56
       },
55
       loginRules: {
57
       loginRules: {
56
         username: [{ required: true, trigger: 'blur', validator: validateUsername }],
58
         username: [{ required: true, trigger: 'blur', validator: validateUsername }],