摘要:我就是一游客系統獲取我的信息拿到權限值動態加載路由通行不是。。我是權限汪等等我看看作者有沒有把你降級沒有好了。。你還是權限汪請進有滾吧你已經不是權限汪了作者已經把你寫成戰斗力只有的渣渣了沒有沒有還敢闖這里滾去關口沒錯,就這么簡單。
大體流程
nx-admin項目地址
首先這里就不講解vue和vuex之類的基礎東西了 有興趣的可以去官方文檔了解。這里根據流程走向大概說說路由配置
首先找到路由配置,路由配置放在了src/router/index.js路由配置里暴露了兩個常量 一個是 constantRouterMap 另外一個是 asyncRouterMap 這里先說說constantRouterMap。 nx-admin的權限驗證大概是
1 默認大家都能訪問的頁面,不需要權限, 都訪問的頁面定義為 constantRouterMap
2 需要登錄或者需要權限的頁面路由定義為 asyncRouterMap
根據后臺獲取到用戶信息role(權限)的不同來動態加載asyncRouterMap中meta.role的權限對應的頁面
登錄成功后做的事情點擊登錄以后 左側的側邊欄有導航列表。 這里提出兩個疑問?
根據路由配置說的 動態加載對應的權限路由 那么側邊欄那么多路由 肯定不能寫死吧?
我點擊登錄后 那些登錄流程怎么走的?用戶權限存在哪里?token在哪里?
側邊欄的動態渲染根據問題1來回答 首先我們找到layout也就是src/views/layout/Layout.vue,
因為在路由配置文件我們看見asyncRouterMap中好多組件的父組件都是Layout 在Layout中我們就可以看到有個組件sidebar。
ok繼續找sidebar這個組件 src/views/layout/components/Sidebar/index.vue,發現這里就是渲染側邊欄的,然后找到渲染的變量是permission_routers 這個變量是存在vuex里面的,也就是說路由是存在vuex的 所以咋們去vuex里面找找看 src/store/modules/permission.js。
src/store/modules/permission.js 這個文件里面有個actions
GenerateRoutes({ commit }, data) { return new Promise(resolve => { const { roles } = data let accessedRouters if (roles.indexOf("admin") >= 0) { accessedRouters = asyncRouterMap } else { accessedRouters = filterAsyncRouter(asyncRouterMap, roles) } commit("SET_ROUTERS", accessedRouters) resolve() }) }
發現就是這一段代碼更改了permission_routers,具體邏輯咱們不看 簡單解釋來說就是
如果用戶的權限是管理員 把asyncRouterMap所有的路由頁面都渲染出來,畢竟管理員嘛 你懂的權限嘛。 否則 我不是管理員但是也不是游客就是一小市民 那么我要去asyncRouterMap中找找我小市民能夠訪問哪些頁面。
看完這段邏輯咋們就知道了這個路由是如何動態更改的了,等等,是不是忘了啥? 雖然我知道這個actions,但是。。。在哪調用的? 經過深思熟慮的著想,在花了0.1s后 就得出,既然是路由嘛 肯定是有個全局的地方要做判斷的 所以得出結論就是 router.beforeEach, 一開始去找那個啥src/main.js,發現beforeEach被分離在src/permission.js 打開這個文件。一切疑問都解開了。
用戶權限的獲取說真的。。這個文件好長。。都不想看了。。。。 下圖的代碼這么長 看個毛啊。。于是我簡單翻譯了下
router.beforeEach((to, from, next) => { NProgress.start() // start progress bar if (getToken()) { // 判斷是否有token if (to.path === "/login") { next({ path: "/" }) NProgress.done() // router在hash模式下 手動改變hash 重定向回來 不會觸發afterEach 暫時hack方案 ps:history模式下無問題,可刪除該行! } else { if (store.getters.roles.length === 0) { // 判斷當前用戶是否已拉取完user_info信息 store.dispatch("GetUserInfo").then(res => { // 拉取user_info const roles = res.data.role store.dispatch("GenerateRoutes", { roles }).then(() => { // 生成可訪問的路由表 router.addRoutes(store.getters.addRouters) // 動態添加可訪問路由表 next({ ...to, replace: true }) // hack方法 確保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record }) }).catch(() => { store.dispatch("FedLogOut").then(() => { Message.error("Verification failed, please login again") next({ path: "/login" }) }) }) } else { // 沒有動態改變權限的需求可直接next() 刪除下方權限判斷 ↓ if (hasPermission(store.getters.roles, to.meta.role)) { next()// } else { next({ path: "/401", query: { noGoBack: true }}) NProgress.done() // router在hash模式下 手動改變hash 重定向回來 不會觸發afterEach 暫時hack方案 ps:history模式下無問題,可刪除該行! } // 可刪 ↑ } } } else { if (whiteList.indexOf(to.path) !== -1) { // 在免登錄白名單,直接進入 next() } else { next("/login") // 否則全部重定向到登錄頁 NProgress.done() // router在hash模式下 手動改變hash 重定向回來 不會觸發afterEach 暫時hack方案 ps:history模式下無問題,可刪除該行! } } })
請說人話,翻譯成人話的版本。。。
每次更改頁面路由 你有沒有token啊? 有啊 好的,你的權限是默認的權限0么? 是的。。我就是一游客 系統獲取我的信息..拿到權限值,動態加載路由(GenerateRoutes)...通行... 不是。。我是權限汪(admin) 等等..我看看作者有沒有把你降級 沒有 好了。。你還是權限汪 請進 有 滾吧,你已經不是權限汪了,作者已經把你寫成戰斗力只有5的渣渣了 沒有 沒有還敢闖這里?滾去關口(/login)
沒錯,就這么簡單。整個權限驗證流程就完整了。剩下的就是讀讀文檔啊,看看如何使用組件之類的了。
參考 https://github.com/Relsoul
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96030.html
摘要:我就是一游客系統獲取我的信息拿到權限值動態加載路由通行不是。。我是權限汪等等我看看作者有沒有把你降級沒有好了。。你還是權限汪請進有滾吧你已經不是權限汪了作者已經把你寫成戰斗力只有的渣渣了沒有沒有還敢闖這里滾去關口沒錯,就這么簡單。 大體流程 參考資料: nx-admin項目地址 首先這里就不講解vue和vuex之類的基礎東西了 有興趣的可以去官方文檔了解。這里根據流程走向大概說說 路由...
摘要:我就是一游客系統獲取我的信息拿到權限值動態加載路由通行不是。。我是權限汪等等我看看作者有沒有把你降級沒有好了。。你還是權限汪請進有滾吧你已經不是權限汪了作者已經把你寫成戰斗力只有的渣渣了沒有沒有還敢闖這里滾去關口沒錯,就這么簡單。 大體流程 參考資料: nx-admin項目地址 首先這里就不講解vue和vuex之類的基礎東西了 有興趣的可以去官方文檔了解。這里根據流程走向大概說說 路由...
摘要:是一個開源的管理系統前端集成方案地址的初心組件更易用,讓每個小白快速上手,最大程度上幫助個人,企業節省時間成本和費用開支。盡管這個過程不簡單,但是干就完了版本添加了圖表第三方網站購物車實戰右鍵菜單 nx-admin 是一個開源的管理系統前端集成方案 github地址 nx-admin的初心 組件更易用, 讓每個小白快速上手, 最大程度上幫助個人,企業節省時間成本和費用開支。 盡管這...
閱讀 3770·2023-04-25 21:09
閱讀 3128·2021-10-20 13:48
閱讀 2942·2021-09-24 10:25
閱讀 2931·2021-08-21 14:08
閱讀 1790·2019-08-30 15:56
閱讀 976·2019-08-30 15:52
閱讀 1841·2019-08-29 14:11
閱讀 3562·2019-08-29 11:01