SpringBoot實戰電商項目mall(30k+star)地址:github.com/macrozheng/…前端
權限管理在後端項目中主要體如今對接口訪問權限的控制,在前端項目中主要體如今對菜單訪問權限的控制。在《手把手教你搞定權限管理,結合Spring Security實現接口的動態權限控制!》中咱們實現了對後端接口的動態權限控制,今天咱們講下如何結合Vue來實現菜單的動態權限控制。vue
mall-admin-web
實現菜單的動態權限控制使用到了兩種技術,一種是Vue Router,另外一種是Vuex,咱們先來了解下這兩種技術。git
Vue Router是Vue.js官方的路由管理器。路由就是一個路徑,當咱們訪問指定路徑時就會跳轉到指定頁面。 咱們項目的路由都是在src/router/index.js
文件中定義的,舉個例子,好比咱們的商品列表頁面路由定義以下。github
因此當咱們訪問http://localhost:8090/#/pms/product時就會跳轉到商品列表頁面。web
咱們前端的左側菜單都是根據Vue Router中定義的路由表生成的,要實現動態菜單顯示,其實只要實現動態路由便可。後端
Vuex是一個專爲Vue.js應用程序開發的狀態管理模式,它採用集中式存儲管理應用的全部組件的狀態。Vuex能夠簡單理解爲一個全局的狀態管理器,咱們能夠把一些全局的狀態存儲在裏面。當咱們在多個組件中顯示這些狀態時,只要在任意一個組件中改變這個狀態,基於Vue的響應式渲染,其他組件中的這個狀態均會改變。ide
Vuex中有幾個核心概念須要瞭解下:函數
Vuex中的核心流程以下:post
接下來咱們來說下如何結合Vue Router和Vuex來實現菜單的動態權限控制。學習
首先咱們須要修改src/router/index.js
中的路由表,將路由表進行拆分,拆分紅必需要顯示的靜態路由表和能夠動態顯示的動態路由表。
而後咱們須要添加src/store/modules/permission.js
文件,在Vuex的Store中添加權限相關狀態,好比和左側菜單綁定的路由表。
這裏有個比較核心的GenerateRoutes方法,用於生成當前用戶能夠訪問的路由。咱們的data參數中包含了用戶能夠訪問的菜單信息。它的具體執行流程以下:從菜單信息中篩選出能夠訪問的動態路由,而後進行排序,最後提交狀態改變到Vuex中去改變routers這個狀態。
關於前端路由和後臺菜單的匹配,實際上是根據路由名稱和菜單的前端名稱來肯定的,好比商品列表中的路由名稱和ums_menu
表中存儲的前端名稱以下。
接下來咱們須要修改src/store/index.js
文件,在Vuex的Store中添加這個權限模塊的狀態。
再修改src/store/getters.js
文件,給權限模塊中的兩個狀態取個別名方便訪問。
咱們還須要修改src/views/layout/components/Sidebar/index.vue
文件,將左側菜單組件和Vuex中存儲的路由狀態進行綁定,這樣當咱們修改了Vuex中的狀態後,菜單就會改變了。mapGetters
是個輔助函數,能夠將Store中的Getter屬性映射到局部計算屬性。
最後咱們須要在用戶登陸成功後,經過store.dispatch('GenerateRoutes', { menus,username })
來修改Vuex中存儲的路由狀態並傳入用戶能夠訪問的菜單信息。
mall項目全套學習教程連載中,關注公衆號第一時間獲取。