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项目全套学习教程连载中,关注公众号第一时间获取。