關於Vue的路由許可權管理的範例程式碼,vue範例程式碼

來源:互聯網
上載者:User

關於Vue的路由許可權管理的範例程式碼,vue範例程式碼

前言

曾經在工作上對 vue 路由許可權管理這方面有過研究,這幾天又看到了幾篇相關的文章,再加上昨天電面中又再一次提及到,就索性整理了一下自己的一些看法,希望對大家有協助。

實現

大體上實現的思路很簡單,先:

無非是將路由配置按使用者類型分割為 使用者路由 和 基本路由,不同的使用者類型可能存在不同的 使用者路由,具體依賴實際業務。

  1. 使用者路由: 目前使用者所特有的路由
  2. 基本路由:所有使用者均可以訪問的路由

實現控制的方式分兩種:

通過vue-router addRoutes 方法注入路由實現控制
通過vue-router beforeEach 鉤子限制路由跳轉

addRoutes 方式:

通過請求服務端擷取目前使用者路由配置,編碼為 vue-router 所支援的基本格式(具體如何編碼取決於前後端協商好的資料格式),通過調用 this.$router.addRoutes 方法將編碼好的使用者路由注入到現有的 vue-router 執行個體中去,以實現使用者路由。

beforeEach 方式

通過請求服務端擷取目前使用者路由配置,通過註冊 router.beforeEach 鉤子對路由的每次跳轉進行管理,每次跳轉都進行檢查,如果目標路由不存再於 基本路由 和 目前使用者的 使用者路由 中,取消跳轉,轉為跳轉錯誤頁。

以上兩種方式均需要在 vue-router 中配置錯誤頁,以保證使用者感知許可權不足。

兩種方式的原理其實都是一樣的,只不過 addRoutes 方式 通過注入路由配置告訴 vue-router :“當前我們就只有這些路由,其它路由地址我們一概不認”,而 beforeEach 則更多的是依賴我們手動去幫 vue-router 辨別什麼頁面可以去,什麼頁面不可以去。說白了也就是 自動 與 手動 的差別。說到這,估計大家都會覺得既然是 自動 的,那肯定是 addRoutes 最方便快捷了,還能簡化業務代碼,筆者一開始也是這麼認為的,但是!很多人都忽略了一點:

addRoutes 方法僅僅是幫你注入新的路由,並沒有幫你剔除其它路由!

設想存在這麼一種情況:使用者在自己電腦上登入了管理員帳號,這個時候會向路由中注入管理員的路由,然後再退出登入,保持頁面不重新整理,改用普通使用者帳號進行登入,這個時候又會向路由中注入普通使用者的路由,那麼,在路由中將存在兩種使用者類型的路由,即使使用者不感知,通過改變 url,普通使用者也可以訪問管理員的頁面!

對於這個問題,也有一個解決辦法:

import Vue from 'vue'import Router from 'vue-router'Vue.use(Router)const createRouter = () => new Router({ mode: 'history', routes: []})const router = createRouter()export function resetRouter () { const newRouter = createRouter() router.matcher = newRouter.matcher}export default router

通過建立一個全新的 Router,然後將新的 Router.matcher 賦給當前頁面的管理 Router,以達到更新路由配置的目的。

筆者做了一個小demo,大家可以去體驗一下。

關於上述問題,在vue-router 的 github issues 下有過討論,分別是:

Add option to Reset/Delete Routes #1436

Feature request: replace routes dynamically #1234

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.