Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
VueElementTemplate
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
HireTest
VueElementTemplate
Commits
1072572a
Commit
1072572a
authored
8 years ago
by
孙晨光
Committed by
花裤衩
8 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update: 递归过滤异步路由表
parent
046d1369
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
17 deletions
+26
-17
permission.js
src/store/modules/permission.js
+26
-17
No files found.
src/store/modules/permission.js
View file @
1072572a
...
...
@@ -8,6 +8,26 @@ function hasPermission(roles, route) {
}
}
/**
* 递归过滤异步路由表,返回符合用户角色权限的路由表
* @param asyncRouterMap
* @param roles
* @returns {Array.<T>|*}
*/
function
filterAsyncRouter
(
asyncRouterMap
,
roles
)
{
let
accessedRouters
=
asyncRouterMap
.
filter
(
route
=>
{
if
(
hasPermission
(
roles
,
route
))
{
if
(
route
.
children
&&
route
.
children
.
length
)
{
route
.
children
=
filterAsyncRouter
(
route
.
children
,
roles
)
}
return
true
}
return
false
})
return
accessedRouters
}
const
permission
=
{
state
:
{
routers
:
constantRouterMap
,
...
...
@@ -25,23 +45,12 @@ const permission = {
GenerateRoutes
({
commit
},
data
)
{
return
new
Promise
(
resolve
=>
{
const
{
roles
}
=
data
;
const
accessedRouters
=
asyncRouterMap
.
filter
(
v
=>
{
if
(
roles
.
indexOf
(
'admin'
)
>=
0
)
return
true
;
if
(
hasPermission
(
roles
,
v
))
{
if
(
v
.
children
&&
v
.
children
.
length
>
0
)
{
v
.
children
=
v
.
children
.
filter
(
child
=>
{
if
(
hasPermission
(
roles
,
child
))
{
return
child
}
return
false
;
});
return
v
let
accessedRouters
if
(
roles
.
indexOf
(
'admin'
)
>=
0
)
{
accessedRouters
=
asyncRouterMap
}
else
{
return
v
}
accessedRouters
=
filterAsyncRouter
(
asyncRouterMap
,
roles
)
}
return
false
;
});
commit
(
'SET_ROUTERS'
,
accessedRouters
);
resolve
();
})
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment