Skip to content

Commit 4c49259

Browse files
inklakePanJiaChen
authored andcommitted
refine[permission.js]: switch roles will refresh the sidebar correctly (#1067)
后台菜单->权限测试页->指令权限 切换角色 会正确 刷新侧边栏 > /src/store/modules/permission.js 原方法在递归筛选侧边菜单后, 会意外修改原始 asyncRouterMap 导致侧边菜单重绘不正常 已经用新方法替代修复 结果入下图 ![图片](https://s1.ax1x.com/2018/09/07/iCL7f1.gif)
1 parent 83516ae commit 4c49259

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

src/store/modules/permission.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,31 @@ import { asyncRouterMap, constantRouterMap } from '@/router'
77
*/
88
function hasPermission(roles, route) {
99
if (route.meta && route.meta.roles) {
10-
return roles.some(role => route.meta.roles.indexOf(role) >= 0)
10+
return roles.some(role => route.meta.roles.includes(role))
1111
} else {
1212
return true
1313
}
1414
}
1515

1616
/**
1717
* 递归过滤异步路由表,返回符合用户角色权限的路由表
18-
* @param asyncRouterMap
18+
* @param routes asyncRouterMap
1919
* @param roles
2020
*/
21-
function filterAsyncRouter(asyncRouterMap, roles) {
22-
const accessedRouters = asyncRouterMap.filter(route => {
23-
if (hasPermission(roles, route)) {
24-
if (route.children && route.children.length) {
25-
route.children = filterAsyncRouter(route.children, roles)
21+
function filterAsyncRouter(routes, roles) {
22+
const res = []
23+
24+
routes.forEach(route => {
25+
const tmp = { ...route }
26+
if (hasPermission(roles, tmp)) {
27+
if (tmp.children) {
28+
tmp.children = filterAsyncRouter(tmp.children, roles)
2629
}
27-
return true
30+
res.push(tmp)
2831
}
29-
return false
3032
})
31-
return accessedRouters
33+
34+
return res
3235
}
3336

3437
const permission = {
@@ -47,7 +50,7 @@ const permission = {
4750
return new Promise(resolve => {
4851
const { roles } = data
4952
let accessedRouters
50-
if (roles.indexOf('admin') >= 0) {
53+
if (roles.includes('admin')) {
5154
accessedRouters = asyncRouterMap
5255
} else {
5356
accessedRouters = filterAsyncRouter(asyncRouterMap, roles)

src/store/modules/user.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ const user = {
122122
},
123123

124124
// 动态修改权限
125-
ChangeRoles({ commit }, role) {
125+
ChangeRoles({ commit, dispatch }, role) {
126126
return new Promise(resolve => {
127127
commit('SET_TOKEN', role)
128128
setToken(role)
@@ -132,6 +132,7 @@ const user = {
132132
commit('SET_NAME', data.name)
133133
commit('SET_AVATAR', data.avatar)
134134
commit('SET_INTRODUCTION', data.introduction)
135+
dispatch('GenerateRoutes', data) // 动态修改权限后 重绘侧边菜单
135136
resolve()
136137
})
137138
})

0 commit comments

Comments
 (0)