1
1
import router from './router'
2
2
import store from './store'
3
+ import { Message } from 'element-ui'
3
4
import NProgress from 'nprogress' // progress bar
4
5
import 'nprogress/nprogress.css' // progress bar style
5
6
import { getToken } from '@/utils/auth' // getToken from cookie
6
- import { Message } from 'element-ui'
7
7
8
- // permissiom judge
8
+ NProgress . configure ( { showSpinner : false } ) // NProgress Configuration
9
+
10
+ // permissiom judge function
9
11
function hasPermission ( roles , permissionRoles ) {
10
12
if ( roles . indexOf ( 'admin' ) >= 0 ) return true // admin permission passed directly
11
13
if ( ! permissionRoles ) return true
@@ -16,15 +18,16 @@ const whiteList = ['/login', '/authredirect']// no redirect whitelist
16
18
17
19
router . beforeEach ( ( to , from , next ) => {
18
20
NProgress . start ( ) // start progress bar
19
- if ( getToken ( ) ) { // 判断是否有token
21
+ if ( getToken ( ) ) { // determine if there has token
22
+ /* has token*/
20
23
if ( to . path === '/login' ) {
21
24
next ( { path : '/' } )
22
- NProgress . done ( ) // router在hash模式下 手动改变hash 重定向回来 不会触发afterEach 暂时hack方案 ps:history模式下无问题,可删除该行!
25
+ NProgress . done ( ) // if current page is dashboard will not trigger afterEach hook, so manually handle it
23
26
} else {
24
27
if ( store . getters . roles . length === 0 ) { // 判断当前用户是否已拉取完user_info信息
25
28
store . dispatch ( 'GetUserInfo' ) . then ( res => { // 拉取user_info
26
- const roles = res . data . role
27
- store . dispatch ( 'GenerateRoutes' , { roles } ) . then ( ( ) => { // 生成可访问的路由表
29
+ const roles = res . data . roles // note: roles must be a array! such as: ['editor','develop']
30
+ store . dispatch ( 'GenerateRoutes' , { roles } ) . then ( ( ) => { // 根据roles权限生成可访问的路由表
28
31
router . addRoutes ( store . getters . addRouters ) // 动态添加可访问路由表
29
32
next ( { ...to , replace : true } ) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
30
33
} )
@@ -36,21 +39,21 @@ router.beforeEach((to, from, next) => {
36
39
} )
37
40
} else {
38
41
// 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
39
- if ( hasPermission ( store . getters . roles , to . meta . role ) ) {
42
+ if ( hasPermission ( store . getters . roles , to . meta . roles ) ) {
40
43
next ( ) //
41
44
} else {
42
- next ( { path : '/401' , query : { noGoBack : true } } )
43
- NProgress . done ( ) // router在hash模式下 手动改变hash 重定向回来 不会触发afterEach 暂时hack方案 ps:history模式下无问题,可删除该行!
45
+ next ( { path : '/401' , replace : true , query : { noGoBack : true } } )
44
46
}
45
47
// 可删 ↑
46
48
}
47
49
}
48
50
} else {
51
+ /* has no token*/
49
52
if ( whiteList . indexOf ( to . path ) !== - 1 ) { // 在免登录白名单,直接进入
50
53
next ( )
51
54
} else {
52
55
next ( '/login' ) // 否则全部重定向到登录页
53
- NProgress . done ( ) // router在hash模式下 手动改变hash 重定向回来 不会触发afterEach 暂时hack方案 ps:history模式下无问题,可删除该行!
56
+ NProgress . done ( ) // if current page is login will not trigger afterEach hook, so manually handle it
54
57
}
55
58
}
56
59
} )
0 commit comments