Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ant-design-pro-vue
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
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
tianzhuanghu
ant-design-pro-vue
Commits
059d8b5f
Commit
059d8b5f
authored
Feb 24, 2019
by
Sendya
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: permission directive timeout remove.
parent
1a6e5720
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
103 additions
and
109 deletions
+103
-109
permission.js
src/permission.js
+103
-109
No files found.
src/permission.js
View file @
059d8b5f
import
Vue
from
'vue'
import
router
from
'./router'
import
store
from
'./store'
import
NProgress
from
'nprogress'
// progress bar
import
'nprogress/nprogress.css'
// progress bar style
import
notification
from
'ant-design-vue/es/notification'
import
{
ACCESS_TOKEN
}
from
'@/store/mutation-types'
NProgress
.
configure
({
showSpinner
:
false
})
// NProgress Configuration
const
whiteList
=
[
'login'
,
'register'
,
'registerResult'
]
// no redirect whitelist
router
.
beforeEach
((
to
,
from
,
next
)
=>
{
NProgress
.
start
()
// start progress bar
if
(
Vue
.
ls
.
get
(
ACCESS_TOKEN
))
{
/* has token */
if
(
to
.
path
===
'/user/login'
)
{
next
({
path
:
'/dashboard/workplace'
})
NProgress
.
done
()
}
else
{
if
(
store
.
getters
.
roles
.
length
===
0
)
{
store
.
dispatch
(
'GetInfo'
)
.
then
(
res
=>
{
const
roles
=
res
.
result
&&
res
.
result
.
role
store
.
dispatch
(
'GenerateRoutes'
,
{
roles
}).
then
(()
=>
{
// 根据roles权限生成可访问的路由表
// 动态添加可访问路由表
router
.
addRoutes
(
store
.
getters
.
addRouters
)
const
redirect
=
decodeURIComponent
(
from
.
query
.
redirect
||
to
.
path
)
if
(
to
.
path
===
redirect
)
{
// hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
next
({
...
to
,
replace
:
true
})
}
else
{
// 跳转到目的路由
next
({
path
:
redirect
})
}
})
})
.
catch
(()
=>
{
notification
.
error
({
message
:
'错误'
,
description
:
'请求用户信息失败,请重试'
})
store
.
dispatch
(
'Logout'
).
then
(()
=>
{
next
({
path
:
'/user/login'
,
query
:
{
redirect
:
to
.
fullPath
}
})
})
})
}
else
{
next
()
}
}
}
else
{
if
(
whiteList
.
includes
(
to
.
name
))
{
// 在免登录白名单,直接进入
next
()
}
else
{
next
({
path
:
'/user/login'
,
query
:
{
redirect
:
to
.
fullPath
}
})
NProgress
.
done
()
// if current page is login will not trigger afterEach hook, so manually handle it
}
}
})
router
.
afterEach
(()
=>
{
NProgress
.
done
()
// finish progress bar
})
/**
* Action 权限指令
* 指令用法:
* - 在需要控制 action 级别权限的组件上使用 v-action:[method] , 如下:
* <i-button v-action:add >添加用户</a-button>
* <a-button v-action:delete>删除用户</a-button>
* <a v-action:edit @click="edit(record)">修改</a>
*
* - 当前用户没有权限时,组件上使用了该指令则会被隐藏
* - 当后台权限跟 pro 提供的模式不同时,只需要针对这里的权限过滤进行修改即可
*
* @see https://github.com/sendya/ant-design-pro-vue/pull/53
*/
const
action
=
Vue
.
directive
(
'action'
,
{
bind
:
function
(
el
,
binding
,
vnode
)
{
const
actionName
=
binding
.
arg
const
roles
=
store
.
getters
.
roles
const
permissionId
=
vnode
.
context
.
$route
.
meta
.
permission
let
actions
=
[]
roles
.
permissions
.
forEach
(
p
=>
{
if
(
p
.
permissionId
!==
permissionId
)
{
return
}
actions
=
p
.
actionList
})
if
(
actions
.
indexOf
(
actionName
)
<
0
)
{
setTimeout
(()
=>
{
if
(
el
.
parentNode
==
null
)
{
el
.
style
.
display
=
'none'
}
else
{
el
.
parentNode
.
removeChild
(
el
)
}
},
10
)
}
}
})
export
{
action
}
import
Vue
from
'vue'
import
router
from
'./router'
import
store
from
'./store'
import
NProgress
from
'nprogress'
// progress bar
import
'nprogress/nprogress.css'
// progress bar style
import
notification
from
'ant-design-vue/es/notification'
import
{
ACCESS_TOKEN
}
from
'@/store/mutation-types'
NProgress
.
configure
({
showSpinner
:
false
})
// NProgress Configuration
const
whiteList
=
[
'login'
,
'register'
,
'registerResult'
]
// no redirect whitelist
router
.
beforeEach
((
to
,
from
,
next
)
=>
{
NProgress
.
start
()
// start progress bar
if
(
Vue
.
ls
.
get
(
ACCESS_TOKEN
))
{
/* has token */
if
(
to
.
path
===
'/user/login'
)
{
next
({
path
:
'/dashboard/workplace'
})
NProgress
.
done
()
}
else
{
if
(
store
.
getters
.
roles
.
length
===
0
)
{
store
.
dispatch
(
'GetInfo'
)
.
then
(
res
=>
{
const
roles
=
res
.
result
&&
res
.
result
.
role
store
.
dispatch
(
'GenerateRoutes'
,
{
roles
}).
then
(()
=>
{
// 根据roles权限生成可访问的路由表
// 动态添加可访问路由表
router
.
addRoutes
(
store
.
getters
.
addRouters
)
const
redirect
=
decodeURIComponent
(
from
.
query
.
redirect
||
to
.
path
)
if
(
to
.
path
===
redirect
)
{
// hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
next
({
...
to
,
replace
:
true
})
}
else
{
// 跳转到目的路由
next
({
path
:
redirect
})
}
})
})
.
catch
(()
=>
{
notification
.
error
({
message
:
'错误'
,
description
:
'请求用户信息失败,请重试'
})
store
.
dispatch
(
'Logout'
).
then
(()
=>
{
next
({
path
:
'/user/login'
,
query
:
{
redirect
:
to
.
fullPath
}
})
})
})
}
else
{
next
()
}
}
}
else
{
if
(
whiteList
.
includes
(
to
.
name
))
{
// 在免登录白名单,直接进入
next
()
}
else
{
next
({
path
:
'/user/login'
,
query
:
{
redirect
:
to
.
fullPath
}
})
NProgress
.
done
()
// if current page is login will not trigger afterEach hook, so manually handle it
}
}
})
router
.
afterEach
(()
=>
{
NProgress
.
done
()
// finish progress bar
})
/**
* Action 权限指令
* 指令用法:
* - 在需要控制 action 级别权限的组件上使用 v-action:[method] , 如下:
* <i-button v-action:add >添加用户</a-button>
* <a-button v-action:delete>删除用户</a-button>
* <a v-action:edit @click="edit(record)">修改</a>
*
* - 当前用户没有权限时,组件上使用了该指令则会被隐藏
* - 当后台权限跟 pro 提供的模式不同时,只需要针对这里的权限过滤进行修改即可
*
* @see https://github.com/sendya/ant-design-pro-vue/pull/53
*/
const
action
=
Vue
.
directive
(
'action'
,
{
bind
:
function
(
el
,
binding
,
vnode
)
{
const
actionName
=
binding
.
arg
const
roles
=
store
.
getters
.
roles
const
permissionId
=
vnode
.
context
.
$route
.
meta
.
permission
let
actions
=
[]
roles
.
permissions
.
forEach
(
p
=>
{
if
(
p
.
permissionId
!==
permissionId
)
{
return
}
actions
=
p
.
actionList
})
if
(
actions
.
indexOf
(
actionName
)
<
0
)
{
el
.
parentNode
&&
el
.
parentNode
.
removeChild
(
el
)
||
(
el
.
style
.
display
=
'none'
)
}
}
})
export
{
action
}
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