11import router from './router'
22import store from './store'
3+ import { Message } from 'element-ui'
34import NProgress from 'nprogress' // progress bar
45import 'nprogress/nprogress.css' // progress bar style
56import { getToken } from '@/utils/auth' // getToken from cookie
6- import { Message } from 'element-ui'
77
8- // permissiom judge
8+ NProgress . configure ( { showSpinner : false } ) // NProgress Configuration
9+
10+ // permissiom judge function
911function hasPermission ( roles , permissionRoles ) {
1012 if ( roles . indexOf ( 'admin' ) >= 0 ) return true // admin permission passed directly
1113 if ( ! permissionRoles ) return true
@@ -16,15 +18,16 @@ const whiteList = ['/login', '/authredirect']// no redirect whitelist
1618
1719router . beforeEach ( ( to , from , next ) => {
1820 NProgress . start ( ) // start progress bar
19- if ( getToken ( ) ) { // 判断是否有token
21+ if ( getToken ( ) ) { // determine if there has token
22+ /* has token*/
2023 if ( to . path === '/login' ) {
2124 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
2326 } else {
2427 if ( store . getters . roles . length === 0 ) { // 判断当前用户是否已拉取完user_info信息
2528 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权限生成可访问的路由表
2831 router . addRoutes ( store . getters . addRouters ) // 动态添加可访问路由表
2932 next ( { ...to , replace : true } ) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
3033 } )
@@ -36,21 +39,21 @@ router.beforeEach((to, from, next) => {
3639 } )
3740 } else {
3841 // 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
39- if ( hasPermission ( store . getters . roles , to . meta . role ) ) {
42+ if ( hasPermission ( store . getters . roles , to . meta . roles ) ) {
4043 next ( ) //
4144 } 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 } } )
4446 }
4547 // 可删 ↑
4648 }
4749 }
4850 } else {
51+ /* has no token*/
4952 if ( whiteList . indexOf ( to . path ) !== - 1 ) { // 在免登录白名单,直接进入
5053 next ( )
5154 } else {
5255 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
5457 }
5558 }
5659} )
0 commit comments