按钮权限实现-自定义指令

【Vue 第二十五章】Vue3自定义指令、权限按钮实现思路、自定义拖拽指令 Vue3自定义指令、权限按钮实现思路、自定义拖拽指令 阅读详情

自定义指令定义

v-show :Vue 的内置指令,通过这个指令能展示和隐藏节点 (Vue底层控制了该节点的 display 属性)

自定义指令:在构建项目过程中,虽然我们都是使用的组件形式,但是在某些情况下,我们仍然需要对普通DOM元素进行底层操作,这个时候就会用到自定义指令。
自定义指令既可以像 v-show 一样,不搭配属性值,也可以像 v-text配置属性值来实现特殊效果

1. 在自定义指令文件中编写以下代码
```javascript
方法一
//这里由于后台返回的button数组存放在仓库中,所以这里需要引入pinia
import pinia from "@/store";
import userstore from "@/store/modules/user.ts";
let UserStore = userstore(pinia);
export const isHasButton = (app: any) => {
  // 全局自定义指令,实现按钮权限
  app.directive("has", {
    // 代表使用这个全局自定义指令挂载完毕的时候会执行一次
    mounted(el: any, options: any) {
      //自定义指令右侧的数值:如果在用户信息buttons数组当中没有,直接从Dom树上干掉
      if (!UserStore.buttons.includes(options.value)) {
        // dom的原生方法
        el.parentNode.removeChild(el);
      }
    },
  });
};
方法二

//使用useCache钩子获取缓存工具wsCache,用于从缓存中获取,也可不存在缓存中,像方法一一样直接读取
const { wsCache } = useCache()

/**
 * 在当前应用中注册一个自定义指令`hasPermi`,用于检查元素的权限
 * 此函数的目的是通过自定义指令来管理页面元素的显示和隐藏,根据用户权限动态更新DOM
 * 
 * @param app 应用实例,允许对应用的各个方面进行访问和操作
 */
export function hasPermi(app: App<Element>) {
  // 注册自定义指令`hasPermi`
  app.directive('hasPermi',{
    // 在被绑定元素插入到 DOM 后调用
    mounted(el, binding) {
      checkPermission(el, binding)
    },
    // 在绑定元素所在的模板更新后调用
    updated(el, binding) {
      checkPermission(el, binding)
    }
  })
}
/**
 * 检查元素是否具有指定权限
 * 此函数用于动态显示或隐藏具有指定权限的DOM元素
 * @param {Element} el - 需要进行权限检查的DOM元素
 * @param {Object} binding - 包含权限值的v-bind对象
 */
const checkPermission = (el, binding) => {
  // 获取绑定的权限值
  const { value } = binding
  // 定义全权限标识
  const all_permission = '*:*:*'
  // 从缓存中获取用户信息
  const userInfo = wsCache.get(CACHE_KEY.USER)
  // 提取用户的权限列表
  const permissions = userInfo?.permissions || []
  
  // 检查绑定的权限值是否为非空数组
  if (value && value instanceof Array && value.length > 0) {
    const permissionFlag = value

    // 检查是否具有任何匹配的权限
    const hasPermissions = permissions.some((permission: string) => {
      return all_permission === permission || permissionFlag.includes(permission)
    })
    
    // 如果没有匹配的权限,则隐藏元素
    if (!hasPermissions) {
      el.style.display = 'none'
    } else {
      el.style.display = ''
    }
  } else {
    // 如果权限值不符合预期格式,抛出错误
    throw new Error(t('permission.hasPermission'))
  }
}
  1. 首先在main.js中引用并使用所存放自定义指令的文件
/ 引入自定义指令
import { isHasButton } from "@/directive/has";
isHasButton(app);
  1. 最后在需要使用按钮权限的地方直接使用即可
//btn.Role.add 这是后台返回的按钮名称,由于在main.js中已经全局注册isHasButton ,所以可以直接使用
  <el-button
        type="primary"
        size="default"
        icon="Plus"
        @click="AddroleBtn"
        v-has="`btn.Role.add`"
        >添加角色</el-button
      >
手把手教你用AirSim生成无人机训练数据集:RGB/深度图/分割图全攻略 本文详细介绍了如何使用AirSim仿真插件在UE4环境中生成无人机训练数据集,涵盖RGB、深度图和分割图等多种模态数据的采集与处理。通过实战指南,读者可以掌握环境配置、多模态数据采集、自动化流程设计及数据后处理等关键技术,为无人机视觉算法开发提供高质量训练数据。 阅读详情

相关推荐

基于Jetson Nano与YOLOv5s的无人机道路抛洒物实时检测系统【附数据集+代码】

本文详细介绍基于Jetson Nano与YOLOv5s的无人机道路抛洒物实时检测系统,通过硬件选型、数据采集、模型优化等关键步骤,实现高效的道路安全监控。系统结合无人机高空视角和YOLOv5s算法,能精准识别各类抛洒物,实测准确率达98.2%,为交通管理提供智能化解决方案。

weixin_29081163的博客 1456

自定义指令按钮权限

要实现按钮级权限控制,可以使用Vue的自定义指令。自定义指令可以在DOM元素上添加特定的行为和功能。首先,你需要创建一个自定义指令,用于检查用户是否具有权限执行某个操作。const {value } = binding const hasPermission = checkPermission(value) // 检查用户是否具有权限 if(!

qq_65665259的博客 684

【SpringBoot】1、创建第一个SpringBoot项目

创建SpringBoot项目可以通过两种方式,1、通过访问:https://start.spring.io/,SpringBoot的官方网站进行创建SpringBoot项目;2、通过工具(例如:Idea)创建SpringBoot项目。本次使用开发工具:Idea创建我的第一个SpringBoot项目。 首先,打开我们的Idea开发工具 选择Create New Poject(创建一个新的项目) ...

JACKAL 21万+

通过自定义指令实现按钮权限

通过自定义指令实现按钮权限

m0_72788309的博客 561

2017年全国大学生电子设计竞赛综合测评题目解析——Multisim仿真

1.题目 给定两个单电源的双运放芯片READ2302G芯片(当时记得增益带宽积好像是6M),一片HD74LS74数字芯片双D触发器,需要详细电路图、手写报告,5个波形输出,测频,测幅,8:00公布题目,15:00停止答题,中间可以吃饭(也可以不吃继续做),15:00清场,休息一段时间后开始进场测试,打分。 2.要求 (1)一片运放搭建方波振荡电路,频率 20 KHz,误差 0.1 KHz,幅度 3...

DengFengLai123的博客 2万+

ICM20948 DMP代码详解(69)

ICM20948 DMP代码详解(69)

phmatthaus的专栏 618

Vue自定义指令实现按钮级的权限控制

bind:只调用一次,指令第一次绑定到元素时调用。用这个钩子函数可以定义一个绑定时执行一次的初始化设置。( bind 时父节点为null,因为 bind 是在 dom 树绘制前调用)inserted:被绑定元素插入父节点时调用(仅保证父节点存在,但不一定已被插入文档中,在 dom 树绘制后调用)。update:被绑定于元素所在的模板 vNode 更新时调用,但是可能发生在其子 vNode更新之前。指令的值可能发生了改变,也可能没有。可以通过比较更新前后的绑定值,来忽略不必要的模板更新。

qq_34082921的博客 2840

69页完整版智慧港口综合解决方案

智慧港口需求4港机远程操控等自动化改造需求自动化码头AGV无线通信及专用视频系统需求安全生产视频监控类需求港机RCMS及设备管理需求岸边智能理货码头三维全景应用智慧港口解决方案5自动化码头AGV/跨运车/无人集卡无线接入港机远控视觉及冗余无线通信视觉集卡防吊起系统集装箱码头岸边智能理货港机RCMS系统无线接入港机智能化管理(无线高清视频监控、一键报警、远程抄表系统)港口拖轮无线接入岸边溢油监测系统TD-LTE覆盖及业务终端接入港口生产管理系统港口可视化集群调度港口GiNMS综合网络设备智能管理全球作业效率最

zuoan1993的博客 2130

Vue自定义指令实现按钮级权限

在很多后台管理系统中,常常需要做按钮权限控制。 当然我们可以使用v-if来实现,不过这样做,每个页面都要获取一次权限信息,代码往往很冗余。 接下来我们将封装自定义指令,来实现按钮级的权限控制。 一、先定义检测函数 检测可以显示的权限数据 // 检测传入的元素key是否可以显示 function checkKey(key) { // 获取权限数组 let permissionData = sessionStorage.getItem("permissionData") ? sess

我就随便问问 7422

使用C++实现DNS欺骗攻击

其中,domain_name表示需要欺骗的域名,dns_server_ip表示实际DNS服务器的IP地址,fake_ip表示需要重定向到的IP地址。在DNS查询过程中,当客户端向DNS服务器请求解析某个域名时,DNS服务器会返回该域名对应的IP地址。DNS劫持是一种常见的网络攻击方式,通过篡改DNS响应数据,使得用户访问的网站被重定向到攻击者指定的恶意站点。我们使用C++编写一个简单的DNS欺骗程序,使得当客户端请求解析特定的域名时,我们可以将其重定向到指定的IP地址。使用C++实现DNS欺骗攻击。

TechGlide的博客 412

用AList挂载网盘,无损看VR电影教程,无需下载到PICO头显本地!

用AList挂载网盘 + WebDAV直连头显,看片像拉本地一样流畅,不怕卡顿、不怕没空间,简直是VR看片刚需配置!别再用U盘传电影了,用AList + WebDAV,直接流畅看4K,看片效率翻倍,体验提升一个档次!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 5546

Vue自定义指令实现按钮权限管理

1. 前言在 《从头再学 Vue 的指令》介绍了什么是 Vue 指令,以及如何实现自定义指令。接下来我们通过使用自定义指令来解决一个开发过程中的实际需求:按钮权限管理。2. 分析在管理系...

语霖BABA的博客 4098

51单片机+L298驱动步进电机+L297测速+LCD1602显示+按键调试+Proteus仿真

51单片机+L298驱动步进电机+L297测速+LCD1602显示+按键调试+Proteus仿真 *Proteus仿真 L298N是双H桥式驱动器。 L297是步进电机控制集成芯片(包括环形分配器),可产生四相驱动信号,应用于微处理机控制两相双极性和四相单极性步进电机。电动机可由半阶梯、正常和斩波驱动模式驱动,同时设于晶片内的PWM斩波线路容许以开关形式控制线路的电流。此器件只需要时钟、方向和模式输入信号。相位是由内部产生的,因此可减轻微处理机和程序设计的负担。 实例代码 /************

perseverance51博客 4585

Vue 通过自定义指令实现前端按钮权限功能

Vue 通过自定义指令实现前端按钮权限功能 登录完以后通过token获取用户对应的button(按钮权限),通过自定义指令,判断当前按钮的权限是否在用户对应的button数组里,若不在即删除该按钮DOM。

M_emory_的博客 1132

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

vue使用自定义指令实现页面按钮权限控制

vue使用自定义指令实现页面按钮权限控制: 用户登录成功后, 在 router.beforeEach() 发起请求获取用户所拥有的权限,并将权限存储到 store 中,初始化 hasBtnPermi 对象, 并导入到入口文件 mian.js,在钩子函数 componentUpdated 判断是否有该按钮权限, 没有就用 removeChild() 方法移除按钮元素

a123456234的博客 1495

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Vue3自定义指令实现按钮权限

通过自定义指令快速实现按钮权限

i-cat的博客 1815

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

vue 自定义指令 实现 按钮权限

1.登录成功后,获取后台返回所有的按钮权限id,存到sessionStorage中 2.在main.js中自定义指令 const has = Vue.directive('has', { inserted: function (el, binding) { // 获取按钮权限 if (!Vue.prototype.$_has(binding.value)) { ...

白日强的博客 2006

Vue3 自定义指令实现按钮权限控制

业务需求除了路由需要控制外点击按钮也需要做到控制,百度了vue2相关资料发现大部分都是使用自定义指令实现控制按钮显示和隐藏,刚好手头上做了个demo 写个文档记录下; vue2和vue3directive的函数也不一样 bind → beforeMount inserted → mounted beforeUpdate: new! this is called before the element itself is updated, much like the component lifecycle ho

ZhuAiQuan的博客 2976

vue如何实现不能点击按钮_Vue自定义指令实现按钮权限管理

1. 前言在 《从头再学 Vue 的指令》介绍了什么是 Vue 指令,以及如何实现自定义指令。接下来我们通过使用自定义指令来解决一个开发过程中的实际需求:按钮权限管理。2. 分析在管理系统中,不可避免的需要有权限管理模块。权限的划分可大可小。对于前端页面来讲,大一点的权限如菜单权限,小一点的如按钮权限。菜单权限的话我们可以在后端返回的菜单数据上做处理,后端处理时只将当前用户有权限的菜单数据返给前端...

weixin_32526561的博客 828

基于VUE自定义指令实现按钮级权限控制

前言:关于权限的那些事!!! 路由权限可参看这位大神写的,很全面==>手摸手,带你用vue撸后台 系列二(登录权限篇) 思路: 登录:当用户填写完账号和密码后向服务端验证是否正确,验证通过之后,服务端...

setsunadoudou的博客 959

Vue自定义权限指令v-auth实现按钮权限控制

面向B端的商户中一般会根据当前用户去获取对应的权限码去控制页面和按钮的展示,在这里我们可以封装v-auth指令去实现多条件判断的按钮权限控制。(vue官方自定义指令)v-auth传入的权限码可以是String或者Array,此外还提供跟数组some和every方法一样的修饰符。/** * auth指令 v-auth="Array or String" * 传入的权限码可以是数组或者是字符串 ...

weixin_34321977的博客 1万+

vue directive全局自定义指令实现按钮级别权限控制

vue directive全局自定义指令实现按钮级别权限控制

且听风吟的博客 1880

VUE自定义指令实现按钮权限控制

在按钮上绑定自定义指令,将访问标记传入,然后在指令的编写中,将当前页面按钮的访问权限数组和按钮的访问标记作比对,访问权限数组中存在该标记,即可访问。

bingjilingvsh2o的专栏 729

关于vue3 按钮权限的控制,使用自定义指令来实现

根据不同的权限展示或者隐藏按钮。

Vue1024的博客 1116
上一篇: vue3通过ref调用子组件方法,第一次点击报找不到该方法,ref和v-if冲突
下一篇: vue菜单权限
小夏同学呀
博客等级 码龄5年 259粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值