fix: 判断页面权限的path统一从match中拿路由path

This commit is contained in:
wanchun 2022-04-19 17:47:53 +08:00
parent 2ca3951c3f
commit 01598a08ac
2 changed files with 25 additions and 14 deletions

View File

@ -4,10 +4,10 @@
对于前端应用来说,权限就是页面、页面元素是否可见。 对于前端应用来说,权限就是页面、页面元素是否可见。
### 资源 ### 资源
Fes.js 把页面、页面元素统一叫做资源,每个资源都有 `accessId` Fes.js 把页面、页面元素统一叫做资源,用资源 ID 来识别区分他们
- 页面的 `accessId` 默认是页面的路由 `path` 。比如页面 `pages/a.vue` 的路由 `path``/a`。当页面访问 `/a` 时会渲染当前页面,`/a` 也就是页面的 `accessId` - 页面的资源 ID 默认是页面的路由 `path` 。比如页面 `pages/a.vue` 的路由 `path``/a`。当页面访问 `/a` 时会渲染当前页面,`/a` 也就是页面的 `accessId`
- 页面元素的 `accessId` 没有默认值,由我们自定义。 - 页面元素的资源 ID 没有默认值,需要自定义。
```vue ```vue
<template> <template>
<access :id="accessId"> accessOnepicess1 <input /> </access> <access :id="accessId"> accessOnepicess1 <input /> </access>

View File

@ -1,4 +1,5 @@
import { plugin, ApplyPluginsType } from '@@/core/coreExports'; import { plugin, ApplyPluginsType } from '@@/core/coreExports';
// eslint-disable-next-line import/extensions
import { access, install } from './core'; import { access, install } from './core';
export function onRouterCreated({ router }) { export function onRouterCreated({ router }) {
@ -9,25 +10,35 @@ export function onRouterCreated({ router }) {
initialValue: {} initialValue: {}
}); });
if (to.matched.length === 0) { if (to.matched.length === 0) {
if (runtimeConfig.noFoundHandler && typeof runtimeConfig.noFoundHandler === 'function') { if (
runtimeConfig.noFoundHandler
&& typeof runtimeConfig.noFoundHandler === 'function'
) {
return runtimeConfig.noFoundHandler({ return runtimeConfig.noFoundHandler({
router, to, from, next router,
to,
from,
next
}); });
} }
return next(false);
} }
let path; // path是匹配路由的path不是页面hash
if (to.matched.length === 1) { const canRoute = await access.hasAccess(
path = to.matched[0].path; to.matched[to.matched.length - 1].path
} else { );
path = to.path;
}
const canRoute = await access.hasAccess(path);
if (canRoute) { if (canRoute) {
return next(); return next();
} }
if (runtimeConfig.unAccessHandler && typeof runtimeConfig.unAccessHandler === 'function') { if (
runtimeConfig.unAccessHandler
&& typeof runtimeConfig.unAccessHandler === 'function'
) {
return runtimeConfig.unAccessHandler({ return runtimeConfig.unAccessHandler({
router, to, from, next router,
to,
from,
next
}); });
} }
next(false); next(false);