广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue基于Element按钮权限实现方案
  • 280
分享到

vue基于Element按钮权限实现方案

2024-04-02 19:04:59 280人浏览 泡泡鱼
摘要

背景需求:ERP系统需增加 ”按钮权限控制“ 功能,对权限的控制粒度要普及到按钮层级。 预期 按钮权限控制的交互方式无非两种:"不可见" 和 "可见不可点"。 不可见 不可见

背景需求:ERP系统需增加 ”按钮权限控制“ 功能,对权限的控制粒度要普及到按钮层级。

预期

按钮权限控制的交互方式无非两种:"不可见" 和 "可见不可点"。

不可见

不可见的交互方式相对简单,我们可使用 v-if 控制其是否显示。使用 v-show 也行,但不够保险,毕竟 v-show 只是把样式改成 display: none,在真实的 DOM 渲染还是存在的,所以更推荐 v-if 来控制不可见。

可见不可点

“看是能看了,但你不行了”。

  • 样式控制(得加个禁用样式),什么 cursor: not-allowed ,置灰之类的云云;
  • 不可点击,即要禁用或屏蔽点击事件,好像有 preventDefault/stopProgration 可实现;

最终产品需求选择了 “可见不可点”,原因可能就觉得不可见太简单了。(¬_¬)

思路探索

  • 给按钮点击事件的回调函数,加个包装函数,对其权限控制,进行事件拦截与触发。相当是做了个代理,有点高阶组件那意思(但对现有业务改动太大,得对每个@click绑定函数逐个修改,遂放弃该方案);
  • 阻止按钮点击事件冒泡与触发,貌似能用上 preventDefautl/stopProgration, 感觉能用指令的方式对 DOM 元素进行事件监听,允许的话则让事件正常执行,不允许则拦截屏蔽;

实践方案

最终选择了指令的方式,最小成本扩展,避免改动现有业务代码逻辑。
针对权限控制需做点击劫持的元素:

  • el-button
  • btn-wrapper(自封装组件)
  • div/span/a 等标签

具体实现方案请看下文:

权限入口:Vuex 控制,全局使用


// 用户登陆后,获取该用户权限 CODE 码,并存储至 store
this.$store.commit('SET_AUTH_CODE', authCodeList);

SET_AUTH_CODE: (state, acthCode) => {
 if (acthCode) {
   state.autoCodeList = acthCode;
 }
 setStore({
  name: 'autoCodeList',
  content: state.autoCodeList || [],
 });
}

定义权限指令


const disableClickFn = (event) => {
  event && event.stopImmediatePropagation();
}

export const hasPermission = () => {
  Vue.directive('permission', {
    bind(el, binding) {
      let disalbe = true;
      if (autoCodeList.length && autoCodeList.includes(binding.value)) {
        disable = false;
      }

      if (disable) {
        el.classList.add('permission-disabled');
        el.setAttribute('disabled', 'disabled');
        el.addEventListener('click', disableClickFn, true);
      }
    },
    unbind(el) {
      el.removeEventListener('click', disableClickFn);
    }
  });
};

  • 首先 addEventListener 第三个参数我们使用 useCapture 为 true 让其在捕获阶段触发,因此这里的事件监听器会优先 @click 触发回调;
  • 其次使用了 stopImmediatePropagation 阻止事件冒泡和其它相同事件监听器的触发;

如果多个事件监听器被附加到相同元素的相同事件类型上,当此事件触发时,它们会按其被添加的顺序被调用。如果在其中一个事件监听器中执行 stopImmediatePropagation() ,那么剩下的事件监听器都不会被调用。MSDN - stopImmediatePropagation

增加禁用的 CSS 样式


.permission-disabled {
  position: relative;
  cursor: not-allowed !important;
  pointer-events: none; // 阻止元素成为鼠标事件
  border:none;
  background-image: none;
  &::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0px;
    right: 0px;
    height: 100%;
    z-index: 9;
    background: rgba(255, 255, 255, 0.5);
  }
}

这里使用了一个比较陌生的 CSS 属性, pointer-events。

css3 的 pointer-events 属性指定在什么情况下 (如果有) 某个特定的图形元素可以成为鼠标事件的 target。 更多用法参考:MSDN - pointer-events

这里使用 pointer-events 只是一个辅助功能,并不一定意味着元素上的事件监听器永远不会触发,如果后代元素有指定 pointer-events 并允许成为事件目标的话,是可以触发父元素事件,而且单纯依靠 CSS 属性来控制不点击,还是有风险,因此这里仅作辅助作用。

全局 "权限判断" 工具函数


import { getStore, } from '@/util/store';
const autoCodeList = getStore({ name: 'autoCodeList', }) || [];

export function hasPermission(authName) {
  return !(autoCodeList.length > 0 && autoCodeList.includes(authName));
}

具体使用


// 指令方式(这里的 oms/order/save 就是对应用户登陆时 CODE 权限码)
<el-button v-permission="'oms:order:save'">保存</el-button>

// 函数方式
<el-button :disabled="hasPermission('oms:order:save')"></el-button>

到此这篇关于vue基于Element按钮权限实现方案的文章就介绍到这了,更多相关Element 按钮权限内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: vue基于Element按钮权限实现方案

本文链接: https://www.lsjlt.com/news/122719.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue基于Element按钮权限实现方案
    背景需求:ERP系统需增加 ”按钮权限控制“ 功能,对权限的控制粒度要普及到按钮层级。 预期 按钮权限控制的交互方式无非两种:"不可见" 和 "可见不可点"。 不可见 不可见...
    99+
    2022-11-12
  • vue-element-admin按钮级权限管控的实现
    目录思路表结构与数据实现按钮调用随着软件的发展,网站从最初的满足用户业务需求到提升用户。就比如一个按钮只要求权限方面的管控我们可以通过 shiro,注解等方式来实现,但是页面上用户点...
    99+
    2022-11-13
  • 基于Vue自定义指令如何实现按钮级权限控制
    这篇文章将为大家详细讲解有关基于Vue自定义指令如何实现按钮级权限控制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。思路:登录:当用户填写完账号和密码后向服务端验证是否正...
    99+
    2022-10-19
  • vue路由权限和按钮权限怎么实现
    这篇“vue路由权限和按钮权限怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue路由权限和按钮权限怎么实现”文章吧...
    99+
    2023-06-30
  • vue按钮怎么实现权限控制
    这篇文章主要讲解了“vue按钮怎么实现权限控制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue按钮怎么实现权限控制”吧!一、步骤1.定义buttom权限在state中创建buttomPe...
    99+
    2023-06-22
  • vue + vuex + directives如何实现权限按钮
    这篇文章主要介绍vue + vuex + directives如何实现权限按钮,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!遇到了一个业务场景:某个按钮按下去之前需要先判断它是否登陆...
    99+
    2022-10-19
  • vue路由权限和按钮权限的实现示例
    目录一 菜单路由权限二 按钮权限的实现一 菜单路由权限 1.1前端路由配置表 1.2后端数据返回 1.3 拿到数据后存到vuex  1.4 扁平化的目的是为了跳转路由...
    99+
    2022-11-13
  • vue实现前端按钮组件权限管理
    目录方案1:数组+自定义指令关于路由权限方案2: 二进制表达权限:权限判断判断和使用小结方案1:数组+自定义指令 把权限放到数组中,通过vue的自定义指令来判断是否拥有该权限,有则显...
    99+
    2022-11-13
  • 精确到按钮级别前端权限管理实现方案
    目录这是产品提出的要求:旧的按钮权限控制:解决方案构思:方案优化具体实现核心代码这是产品提出的要求: 页面上的每一个按钮,都要可以通过角色权限来控制 当时的项目背景是一个零售系统的后...
    99+
    2022-11-13
  • Vue自定义v-has指令实现按钮权限判断
    应用场景 以后台管理系统为例,每个用户所拥有的按钮权限不一样。管理员配置权限之后,用户登录时,从接口拿到按钮权限列表,然后根据后台数据判断显示哪些按钮。 简单说一下,自定义指令 ...
    99+
    2022-11-12
  • vue使用自定义指令实现按钮权限展示功能
    目录一、在src下新建directive文件夹二、定义index.js文件,在vue上注入自定义指令三、编写自定义指令四、使用一、在src下新建directive文件夹 二、定义i...
    99+
    2022-11-13
  • vue怎么使用自定义指令实现按钮权限展示功能
    今天小编给大家分享一下vue怎么使用自定义指令实现按钮权限展示功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、在src...
    99+
    2023-06-30
  • 关于Spring Boot动态权限变更问题的实现方案
    1、前言 ​  在Web项目中,权限管理即权限访问控制为网站访问安全提供了保障,并且很多项目使用了Session作为缓存,结合AOP技术进行tok...
    99+
    2022-11-12
  • vuedirective全局自定义指令实现按钮级别权限控制的操作方法
    目录概念全局自定义指令局部自定义指令钩子函数全局自定义指令项目应用在日常项目中,通常会需要根据后台接口返回的数据,来判断当前用户的按钮操作权限。对于当前登录用户来说,只有在当前按钮有...
    99+
    2023-02-06
    vue directive按钮级别权限控制 vue directive全局自定义指令
  • 如何基于SpringSecurity的@PreAuthorize实现自定义权限校验方法
    目录一、前言二、SpringSecurity的@PreAuthorize三、权限校验判断工具四、controller使用五、总结一、前言 在我们一般的web系统中必不可少的就是权限的...
    99+
    2023-05-13
    spring security自定义权限 spring security 权限 springsecurity权限配置在哪
  • Spring Security实现基于RBAC的权限表达式动态访问控制的操作方法
    目录资源权限表达式Spring Security中的实现MethodSecurityExpressionHandler思路以及实现配置和使用昨天有个粉丝加了我,问我如何实现类似shi...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作