页面权限
思路
- 用户可以访问的页面权限都放在了用户信息
userInfo/permission/menu
中 - 左侧菜单是根据
routes
自动生成的 - 为每个权限路由创建一个
name
属性,每个name
对应一个页面权限 - 在
router/index.js
定义私有路由表privateRoutes
和公开路由表publicRoutes
- 在
store/modules
目录下新建一个permission
文件,用来创建权限相关的操作 - 通过
filterRoutes
这个动作来根据name
与页面权限相匹配的方式筛选出权限路由,并返回出去 - 在
src/permission.js
中我们通过router.beforeach
拦截路由,获取用户信息,获取筛选后的私有路由表,利用router.addRoute
来动态添加路由表 - 退出用户登录的时候记得删除路由表,也就是用
removeRoute
这个方法
实现
获取用户信息
页面权限数据在用户个人信息中,有一个permission
字段,里面有一个menu
字段。这是一个数组,数组的每一项是当前用户可以访问的页面name
属性。
1 | const menu = ['userManage', 'roleList', 'permissionList', 'articleRanking', 'articleCreate'] |
私有路由表不再被直接添加到routes
1 | export const publicRoutes = [] |
通过route.addRoutes()
动态添加路由到路由表中
通过筛选生成权限路由表
1 | // src/store/modules/permission.js |
引入permission模块
1 | import { createStore } from 'vuex' |
路由拦截获取用户数据调用filterRoutes
1 | import router from './router' |
重置路由表数据
1 | // src/router/index.js |
1 | // src/store/modules/user.js |
左侧菜单的生成
1 | <template> |
1 | import { computed } from 'vue' |
SidebarItem组件
1 | <template> |