阅读 154

Vue项目按钮权限控制

从架构去思考按钮权限控制

image.png

分析所有需求

其实按钮控制还是很简单,并且网上也有许多解决方案,我这里主要是分享一下自己实现的一个过程

我主要分为

  • 注册按钮

  • 菜单控制按钮

  • 角色控制控制菜单已有按钮

  • 路由对比当前页面按钮KEY实现控制

1.1 注册按钮

我这里是在字典表配置按钮  有按钮名以及按钮KEY等字段

  • 方案一:在页面中我们用组件去注册按钮以及按钮

<!-- auth对应在配置中添加的KEY 名字尽量和配置表统一--> <BtnAuth auth="UPDATE_BUTTON">    <el-button size="mini" type="primary">编辑</el-button> </BtnAuth> 复制代码

  • 方案二: 把所有配置表中的按钮注册成组件

/**  * 我的思路是通过一个组件容器包裹所有按钮 * 页面中需要传入一个组件对应的key 以及该按钮调用的方法 * 这样做可以统一控制名字都可以通过字典中去更改 * 因为时间原因没有采取这种方案 主要也是怕出问题 因为已经上线了 */ <BtnAuth auth="UPDATE_BUTTON" v-on={xxxxx}> </BtnAuth> 复制代码

1.2 菜单控制按钮

这个没啥好说的

1.3 角色控制控制菜单已有按钮

xxxx

1.4 路由对比当前页面按钮KEY实现控制

这个步骤就是核心了 逻辑基本上都是这里实现的

<script> import { usePermission } from '@/hooks/usePermission' const isTextMatch = false // 是否使用文字匹配 export default {   name: 'BtnAuth',   props: {     auth: {       type: String | Array,       default: () => []     }   },   render() {     const slot = this.$slots?.default || null     const { hasPermission } = usePermission()     if (!slot) return null     const btnText = slot?.componentOptions?.children[0]?.text     let authdef = null     if (btnText && isTextMatch) {       authdef = {         添加: 'INSERT_BUTTON',         编辑: 'UPDATE_BUTTON',         删除: 'DELETE_BUTTON',         审核: 'AUDIT_BUTTON'       }[btnText]     }     return hasPermission(authdef || this.auth) ? slot : null   } } </script>


作者:前端小白ggg
链接:https://juejin.cn/post/7023645970718162952


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐