2021-03-03 21:36:51 +08:00

216 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# @webank/fes-plugin-access
## 介绍
对于前端应用来说,权限就是页面、页面元素是否可见。
### 资源
Fes.js 把页面、页面元素统一叫做资源,每个资源都有 `accessId`
- 页面的 `accessId` 默认是页面的路由 `path` 。比如页面 `pages/a.vue` 的路由 `path``/a`。当页面访问 `/a` 时会渲染当前页面,`/a` 也就是页面的 `accessId`
- 页面元素的 `accessId` 没有默认值,我们可以自定义。
```vue
<template>
<access :id="accessId"> accessOnepicess1 <input /> </access>
<div v-access="accessId"> accessOnepicess2 </div>
</template>
<script>
export default {
setup(){
return {
accessId: 'accessOnepicess'
}
}
}
</script>
```
### 角色
Fes.js 用角色定义一组资源。当访问 Fes.js 应用时,使用插件提供的 API 设置用户的角色,角色对应的资源才可见,非角色对应的资源不可见。
当然有时候业务比较复杂,角色不能在前端应用中预先定义,而是用户自定义的,储存在数据库中。不要怕!插件也提供粒度更细的 API 来控制当前用户能访问的资源。
## 启用方式
`package.json` 中引入依赖:
```json
{
"dependencies": {
"@webank/fes": "^2.0.0",
"@webank/fes-plugin-access": "^2.0.0"
},
}
```
## 配置
### 编译配置
`.fes.js` 中配置:
```js
export default {
access: {
roles: {
admin: ["/", "/onepiece", '/store']
}
}
}
```
#### roles
- **类型**:对象
- **默认值**`{}`
- **详情**
角色预定义列表。`key` 是角色 Id `value`是角色 Id 对应的资源列表。
### 运行时配置
`app.js` 中配置:
```js
export const access = {
noAccessHandler({ router, to, from, next}) {
console.log("被拦截");
next(false);
}
};
```
#### noAccessHandler
- **类型**:函数
- **默认值**null
- **详情**
当进入某个路由时,如果路由对应的页面不属于可见资源列表,则会暂停进入,调用 `noAccessHandler` 函数。
- **参数**
- router
- to
- from
- next
## API
### access
```js
import { access } from '@webank/fes-plugin-access'
```
#### access.hasAccess
- **类型**:函数
- **详情**: 判断某个资源是否可见。
- **参数**
- accessId资源Id
- **返回值**Boolean
#### access.hasLoading
- **类型**:函数
- **详情**:可以用异步数据来设置权限,`hasLoading` 用来判断异步数据是否已经加载完毕。
- **参数**null
- **返回值**Boolean
```js
import { access } from '@webank/fes';
console.log(access.hasLoading())
```
#### access.setRole
- **类型**:函数
- **详情**:设置当前的角色。
- **参数**
- roleId角色Id有两种类型
- String对应着 `roles` 配置对象中的 `key`
- PromisePromise resolve 的结果应对应着 `roles` 配置对象中的 `key`
```js
import { access } from '@webank/fes';
access.setRole(['admin'])
```
#### access.setAccess
- **类型**:函数
- **详情**:设置当前的角色。
- **参数**
- accessIds资源Id数组有两种类型
- Array数组项对应着 `roles` 配置对象中的 `key`
- PromisePromise resolve 的结果应该是`Array<accessId>`
```js
import { access } from '@webank/fes';
access.setAccess(['/a', '/b', '/c'])
```
#### access.addAccess
- **类型**:函数
- **详情**添加某个资源Id为可见。
- **参数**
- accessId资源Id
```js
import { access } from '@webank/fes';
access.addAccess("aaa");
```
### useAccess
- **类型**[composition]((https://v3.cn.vuejs.org/guide/composition-api-introduction.html)) 函数
- **详情**:判断某个资源是否可见。
- **参数**
- accessId资源Id
- **返回值**`ref`
```vue
<template>
<div v-if="accessOnepicess">accessOnepicess</div>
</template>
<script>
import { useAccess } from '@webank/fes';
export default {
setup(){
const accessOnepicess = useAccess('/onepiece1');
return {
accessOnepicess
}
}
}
</script>
```
### v-access
在指令 `v-access` 中传入 `accessId`,则当 `accessId` 拥有权限时渲染DOM当没有权限时隐藏此DOM。
```vue
<template>
<div v-access="accessId"> accessOnepicess2 </div>
</template>
<script>
export default {
setup(){
return {
accessId: 'accessOnepicess'
}
}
}
</script>
```
### 组件 Access
组件 `Access` 中传入 `accessId`,则当 `accessId` 拥有权限时渲染此组件,当没有权限时隐藏此组件。
```vue
<template>
<access :id="accessId"> accessOnepicess1 <input /> </access>
</template>
<script>
export default {
setup(){
return {
accessId: 'accessOnepicess'
}
}
}
</script>
```