From bb7d860a68f014fd12e3ae8710fb243aabd690b9 Mon Sep 17 00:00:00 2001 From: wx_Luo_liang <471917620@qq.com> Date: Thu, 27 Aug 2020 15:16:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=AA=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\347\275\227\344\272\256/permission.js" | 86 ++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 "\347\275\227\344\272\256/permission.js" diff --git "a/\347\275\227\344\272\256/permission.js" "b/\347\275\227\344\272\256/permission.js" new file mode 100644 index 0000000..53b6d13 --- /dev/null +++ "b/\347\275\227\344\272\256/permission.js" @@ -0,0 +1,86 @@ +import router from './router' +import store from './store' +// import { Message } from 'element-ui' +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import { getToken } from '@/utils/auth' // get token from cookie +import getPageTitle from '@/utils/get-page-title' +import { canTurnTo } from '@/utils/access' + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +// const whiteList = ['/login'] // no redirect whitelist + +const turnTo = (to, access, next) => { + var can = canTurnTo(to.name, access, router.options.routes) + if (can) next() // 有权限,可访问 + else next({ replace: true, name: 'error_401' }) // 无权限,重定向到401页面 +} + +router.beforeEach(async(to, from, next) => { + // start progress bar + NProgress.start() + + // 设置网页标题 + document.title = getPageTitle(to.meta.title) + + /* + if (hasToken){ + if(登录ok){ + 去主页 + }else{ + var userInfo = 用户名 + if(用户名){ + 可以进入下一个路由 + }else{ + 获取用户信息.then(user=>{ + 通过用户权限和跳转的页面的name来判断是否有权限访问; + }).catch(()=>{ + 获取失败 回到登录界面 + }) + } + } + } + + */ + + // 判断用户是否登录,登录了是否有用户信息,有用户信息是否有权限访问要跳转的路由 + const hasToken = getToken() + if (hasToken) { + if (to.path === '/login') { + // 登录后,试图重定向到登录页面的,重新跳转到应用首页 + next({ path: '/' }) + NProgress.done() + } else { + var userInfo = store.state.user.name + if (userInfo) { + turnTo(to, store.state.user.access, next) + } else { + console.log('登录成功,已经有token,但是还没有用户信息,准备获用户信息') + store.dispatch('user/getInfo').then(user => { + // 拉取用户信息,通过用户权限和跳转的页面的name来判断是否有权限访问; + // access必须是一个数组,如:['super_admin'] ['super_admin', 'admin'] + turnTo(to, user.access, next) + }).catch(() => { + // 获取用户信息失败,重置token + store.dispatch('user/resetToken') + next('/login') + }) + } + } + } else { + // 没有登录(因为没有token) + + if (to.path === '/login') { + next() + } else { + next('/login') + NProgress.done() + } + } +}) + +router.afterEach(() => { + // finish progress bar + NProgress.done() +}) -- Gitee