# @webank/fes-plugin-access ## 介绍 对于前端应用来说,权限就是页面、页面元素是否可见。 ### 资源 Fes.js 把页面、页面元素统一叫做资源,每个资源都有 `accessId`: - 页面的 `accessId` 默认是页面的路由 `path` 。比如页面 `pages/a.vue` 的路由 `path` 是 `/a`。当页面访问 `/a` 时会渲染当前页面,`/a` 也就是页面的 `accessId`。 - 页面元素的 `accessId` 没有默认值,我们可以自定义。 ```vue ``` ### 角色 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`。 - Promise,Promise resolve 的结果应对应着 `roles` 配置对象中的 `key`。 ```js import { access } from '@webank/fes'; access.setRole(['admin']) ``` #### access.setAccess - **类型**:函数 - **详情**:设置当前的角色。 - **参数**: - accessIds,资源Id数组,有两种类型: - Array,数组项对应着 `roles` 配置对象中的 `key`。 - Promise,Promise resolve 的结果应该是`Array`。 ```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 ``` ### v-access 在指令 `v-access` 中传入 `accessId`,则当 `accessId` 拥有权限时渲染DOM,当没有权限时隐藏此DOM。 ```vue ``` ### 组件 Access 组件 `Access` 中传入 `accessId`,则当 `accessId` 拥有权限时渲染此组件,当没有权限时隐藏此组件。 ```vue ```