summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChill Fish <[email protected]>2023-09-19 10:11:25 +0800
committerGitHub <[email protected]>2023-09-19 10:11:25 +0800
commitbcb97a6c49dddcf6ca93c2281a744379243b30dc (patch)
treef2eee2d365aef5bde51aa10cb09c7289d78f6548
parent561261cf5850bd4d44968db2abf2200ec2a421f0 (diff)
refactor: 使 router/permission 更易读 (#133)
-rw-r--r--src/router/permission.ts85
1 files changed, 42 insertions, 43 deletions
diff --git a/src/router/permission.ts b/src/router/permission.ts
index abc5489..aeba45c 100644
--- a/src/router/permission.ts
+++ b/src/router/permission.ts
@@ -19,55 +19,54 @@ router.beforeEach(async (to, _from, next) => {
NProgress.start()
const userStore = useUserStoreHook()
const permissionStore = usePermissionStoreHook()
- // 判断该用户是否登录
- if (getToken()) {
- if (to.path === "/login") {
- // 如果已经登录,并准备进入 Login 页面,则重定向到主页
- next({ path: "/" })
- NProgress.done()
- } else {
- // 检查用户是否已获得其权限角色
- if (userStore.roles.length === 0) {
- try {
- if (routeSettings.async) {
- // 注意:角色必须是一个数组! 例如: ['admin'] 或 ['developer', 'editor']
- await userStore.getInfo()
- const roles = userStore.roles
- // 根据角色生成可访问的 Routes(可访问路由 = 常驻路由 + 有访问权限的动态路由)
- permissionStore.setRoutes(roles)
- } else {
- // 没有开启动态路由功能,则启用默认角色
- userStore.setRoles(routeSettings.defaultRoles)
- permissionStore.setRoutes(routeSettings.defaultRoles)
- }
- // 将'有访问权限的动态路由' 添加到 Router 中
- permissionStore.dynamicRoutes.forEach((route) => {
- router.addRoute(route)
- })
- // 确保添加路由已完成
- // 设置 replace: true, 因此导航将不会留下历史记录
- next({ ...to, replace: true })
- } catch (err: any) {
- // 过程中发生任何错误,都直接重置 Token,并重定向到登录页面
- userStore.resetToken()
- ElMessage.error(err.message || "路由守卫过程发生错误")
- next("/login")
- NProgress.done()
- }
- } else {
- next()
- }
- }
- } else {
- // 如果没有 Token
+ const token = getToken()
+
+ // 判断该用户是否已经登录
+ if (!token) {
+ // 如果在免登录的白名单中,则直接进入
if (isWhiteList(to)) {
- // 如果在免登录的白名单中,则直接进入
next()
} else {
// 其他没有访问权限的页面将被重定向到登录页面
- next("/login")
NProgress.done()
+ next("/login")
+ }
+ return
+ }
+
+ // 如果已经登录,并准备进入 Login 页面,则重定向到主页
+ if (to.path === "/login") {
+ NProgress.done()
+ return next({ path: "/" })
+ }
+
+ // 如果用户已经获得其权限角色
+ if (userStore.roles.length !== 0) return next()
+
+ // 否则要重新获取权限角色
+ try {
+ if (routeSettings.async) {
+ // 注意:角色必须是一个数组! 例如: ['admin'] 或 ['developer', 'editor']
+ await userStore.getInfo()
+ const roles = userStore.roles
+ // 根据角色生成可访问的 Routes(可访问路由 = 常驻路由 + 有访问权限的动态路由)
+ permissionStore.setRoutes(roles)
+ } else {
+ // 没有开启动态路由功能,则启用默认角色
+ userStore.setRoles(routeSettings.defaultRoles)
+ permissionStore.setRoutes(routeSettings.defaultRoles)
}
+ // 将'有访问权限的动态路由' 添加到 Router 中
+ permissionStore.dynamicRoutes.forEach((route) => router.addRoute(route))
+ // 确保添加路由已完成
+ // 设置 replace: true, 因此导航将不会留下历史记录
+ next({ ...to, replace: true })
+ } catch (err: any) {
+ // 过程中发生任何错误,都直接重置 Token,并重定向到登录页面
+ userStore.resetToken()
+ ElMessage.error(err.message || "路由守卫过程发生错误")
+ NProgress.done()
+ next("/login")
}
})