Skip to content
This repository was archived by the owner on May 12, 2020. It is now read-only.

Commit f32283e

Browse files
committed
feat(access): add optional access functionality
1 parent 000a37b commit f32283e

5 files changed

Lines changed: 60 additions & 6 deletions

File tree

src/access/controller/routes.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ export function validateAccess(route, accessMap) {
3838
return meta.access.every(access => !!accessMap[access])
3939
}
4040

41+
if (route.meta && route.meta.optionalAccess) {
42+
return meta.optionalAccess.some(access => !!accessMap[access])
43+
}
44+
4145
// situation: preset private route has no 'access' field
4246
return true
4347
}

src/pages/Home/index.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,13 @@ export default {
2020
2121
created() {
2222
// simulate data fetching
23-
setTimeout(() => {
23+
this.$__timer__ = setTimeout(() => {
2424
this.isCompleted = true
2525
}, 2000)
26+
},
27+
28+
beforeDestroy() {
29+
clearTimeout(this.$__timer__)
2630
}
2731
}
2832
</script>

src/pages/OptionalAccess/index.vue

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<template>
2+
<div class="optional-access">
3+
<h3>{{ $t('msg') }}</h3>
4+
<p>
5+
{{ $t('route') }}
6+
<strong>{{ $route.path }}</strong>
7+
</p>
8+
</div>
9+
</template>
10+
11+
<script>
12+
export default {
13+
name: 'OptionalAccess',
14+
15+
i18n: {
16+
messages: {
17+
en: {
18+
msg:
19+
'Current route will disappear until meta.optionalAccess has included at least one correct access',
20+
route: 'Current route is'
21+
},
22+
zh: {
23+
msg:
24+
'当前路由满足至少一项 meta.optionalAccess 权限时,才会出现,否则将消失。',
25+
route: '当前路由是'
26+
}
27+
}
28+
}
29+
}
30+
</script>
31+
32+
<style lang="sass" scoped>
33+
.optional-access
34+
+flex-center
35+
height: 100%
36+
</style>
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export default [
22
'pages/Private/Admin',
33
'pages/Private/User',
4-
'pages/PrivateOnlyChild'
4+
'pages/PrivateOnlyChild',
5+
'pages/OptionalAccess'
56
]

src/router/routes/private.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { dynamicComponents, plainExport } from 'ROUTER/components'
1+
import { dynamicComponents as components, plainExport } from 'ROUTER/components'
22

33
export default [
44
{
@@ -12,7 +12,7 @@ export default [
1212
children: [
1313
{
1414
path: 'admin',
15-
component: dynamicComponents.pagesPrivateAdmin,
15+
component: components.pagesPrivateAdmin,
1616
meta: {
1717
title: 'Admin',
1818
access: [
@@ -24,7 +24,7 @@ export default [
2424
},
2525
{
2626
path: 'user',
27-
component: dynamicComponents.pagesPrivateUser,
27+
component: components.pagesPrivateUser,
2828
meta: {
2929
title: 'User',
3030
access: ['user.device.read']
@@ -44,14 +44,23 @@ export default [
4444
children: [
4545
{
4646
path: 'admin',
47-
component: dynamicComponents.pagesPrivateOnlyChild,
47+
component: components.pagesPrivateOnlyChild,
4848
meta: {
4949
title: 'Admin',
5050
access: ['admin.app.read', 'admin.app.write']
5151
}
5252
}
5353
]
5454
},
55+
{
56+
path: '/optional-access',
57+
component: components.pagesOptionalAccess,
58+
meta: {
59+
title: 'OptionalAccess',
60+
optionalAccess: ['admin.app.read', 'user.app.read']
61+
}
62+
},
63+
// NOTICE: Ensure 404 page is last route
5564
{
5665
path: '*',
5766
redirect: '/404',

0 commit comments

Comments
 (0)