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

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

需求

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

实现

使用自定义指令来控制按钮,当有权限时就显示,没有就移除元素

代码

src/directives/components/button-permission.ts
components文件下可以创建多个自定义指令,根据直接需求来创建使用

登录成功时获取后端返回的权限标识,保存到内存中或者状态管理器中 vuex | pinia

const directives = {// el 指定绑定元素的dom binding.value传递给指令的值mounted(el:HTMLElement, binding: { value: any }) {// value 获取用户使用自定义指令绑定的内容const { value } = binding// 从登录的时候获取到的该用户的permission 是个数组const permissionArray = JSON.parse(localStorage.getItem('permissions')!)if(permissionArray[0] === '*:*:*') return// 超级管理员// 判断用户使用自定义指令,是否使用正确了if (value) {const permissionFlag = value//判断传递进来的按钮权限,用户是否拥有//Array.some(), 数组中有一个结果是true返回true,剩下的元素不会再检测const hasPermission = permissionArray.some((role: any) => {return permissionFlag === role})// console.log(hasPermission)// 当用户没有这个按钮权限时,隐藏这个按钮if (!hasPermission) {el.parentNode && el.parentNode.removeChild(el);}} else {// el.style.display = 'none'// console.log('没有权限')}}
}
export default {name: "permission",directives
}

src/directives/index.ts

import type { App } from 'vue'
import buttonPermission from './components/button-permission'
export default function installDirective(app: App) {app.directive(buttonPermission.name, buttonPermission.directives)
}

main.ts

// 自定义指令的全局注册
import directives from '@/directives'
// 自定义指令的全局注册
app.use(directives)

最后给你想要控制按钮的那个元素标签上加上v-permission 值是后端给定的权限标识 类似 xxx:xxx:xxx

<div class="item bluecolor" v-permission="xxx:xxx:xxx">确定</div>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/12723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter开发实战-请求dio设置Cookie

flutter开发实战-请求dio设置Cookie 在最近开发中碰到了需要websocket长链接收到响应的auth&#xff0c;在之后的请求中需要将其设置为cookie中。 如Cookie:authDHSfQQSAXf89xZqJTLdEDVI2hwzc7p2lUmSNNdUSlgW2MyfQINpYr7jUbkX/; 设置cookie用到了dio_cookie_manager组件 一、…

Java 设计模式 - 简单工厂模式 - 创建对象的简便之道

简单工厂模式是一种创建型设计模式&#xff0c;它提供了一种简单的方式来创建对象&#xff0c;而无需暴露对象创建的逻辑。在本篇博客中&#xff0c;我们将深入了解简单工厂模式的概念、实现方式以及如何在Java中使用它来创建对象。 为什么使用简单工厂模式&#xff1f; 在软…

JMM的特征:可见性,有序性,原子性

1.volatile关键字(保证可见性、有序性) volatile关键字可以有效的保证可见性和有序性。一旦一个共享变量被volatile修饰后&#xff0c;保证了线程在工作内存中对变量进行操作的可见性&#xff0c;一个线程修改了其值&#xff0c;对其他线程来说是立即可见的。而且禁止对程序的…

【无标题】深圳卫视专访行云创新马洪喜:拥抱AI与云原生,深耕云智一体化创新

人工智能&#xff08;AI&#xff09;是引领新一轮科技革命和产业变革的重要驱动力。因此&#xff0c;深圳出台相关行动方案&#xff0c;统筹设立规模1,000亿元的人工智能基金群&#xff0c;引导产业集聚培育企业梯队&#xff0c;积极打造国家新一代人工智能创新发展试验区和国家…

【高压架构】AP5199S LED平均电流型恒流驱动IC 0.01调光 景观舞台汽车灯驱动照明

说明 AP5199S 是一款外围电路简单的多功能平均电流型 LED 恒流驱动器&#xff0c;适用于宽电压范围的非隔离式大功率恒流 LED 驱动领域。芯片 PWM 端口支持超小占空比的 PWM 调光&#xff0c;可响应 60ns 脉宽。为客户提供解决方案&#xff0c;限度地发挥灯具优势&#xff0c;…

解锁ChatGPT的潜能:API调用中运用聊天记录

在过去我通过chatgpt调用api时只知道进行孤立的调用&#xff0c;即这一次调用时&#xff0c;chatgpt并没有拿到上一次调用的上下文&#xff0c;这无疑损失很大。通过探索&#xff0c;我知道了如何通过修改messages这个字典类型的list来告知chatgpt我和它的聊天历史。 关键代码…

shell中按照特定字符分割字符串,并且在切分后的每段内容后加上特定字符(串),然后再用特定字符拼接起来

文件中的内容&#xff0c;可以这么写&#xff1a; awk -F, -v OFS, {for(i1;i<‌NF;i){$i$i"_suffix"}}1 input.txt-F,&#xff1a;设置输入字段分隔符为逗号&#xff08;,&#xff09;&#xff0c;这将使awk按照逗号分割输入文本。-v OFS‘,’&#xff1a;设置输…

【Golang】Golang进阶系列教程--为什么 Go 不支持 []T 转换为 []interface

文章目录 前言官方解释内存布局程序运行中的内存布局通用方法 前言 在 Go 中&#xff0c;如果 interface{} 作为函数参数的话&#xff0c;是可以传任意参数的&#xff0c;然后通过类型断言来转换。 举个例子&#xff1a; package mainimport "fmt"func foo(v inter…

python 面向对象编程的特点 - 封装 - 继承(经典类、新式类) - 多态 - 静态方法、类方法 - 下划线的使用 - 回合制攻击游戏实验

目录 面向对象编程的特点&#xff1a; 封装&#xff1a;封装是将数据和操作&#xff08;方法&#xff09;封装在一个对象中的能力 继承&#xff1a;继承是指一个类&#xff08;子类&#xff09;可以继承另一个类&#xff08;父类&#xff09;的属性和方法。 我们为什么需要继…

HashMap中hash方法的作用(详解)

首先&#xff0c;hash方法用来干什么&#xff1f; 在搞清楚原理之前&#xff0c;我们先站在巨人的肩膀浅浅了解一下hash方法的本质作用。 实质上&#xff0c;它的作用很朴素&#xff0c;就是用key值通过某种方式计算出一个hash码 而且这个hash码我们后面要用来计算key存在底…

golangd\pycharm-ai免费代码助手安装使用gpt4-免费使用--[推荐]

golangd-ai免费代码助手安装使用,pycharm可以使用&#xff0c;估计只要是xx的ide都是可以使用这个插件 目前GPT4以及gpt的大规模使用&#xff0c;如何快速掌握以及在ide中快速使用的办法&#xff0c;今天安装一款golangd编辑器的插件已经使用 一、安装以及使用 1.在golangd中…

贼全! 一举通关的 Spring+SpringBoot+SpringCloud 全攻略, 是真香啊

前几天&#xff0c;有幸从朋友那里得到了一份 Alibaba 内部的墙裂推荐的“玩转 Spring 全家桶的 PDF”&#xff0c;我也不是个吝啬的人&#xff0c;好的东西当然要一起分享。那今天我就秀一把&#xff0c;带你一站通关 Spring、Spring Boot 与 Spring Cloud,让你轻松斩获大厂 O…

安全基础 --- 正则表达式

正则表达式是表达文本模式的方法 正则表达式&#xff08;Regular Expression&#xff09;&#xff0c;简称为正则或Regex&#xff0c;是一个用来描述、匹配和操作字符串的工具。 &#xff08;1&#xff09;限定字符 限定字符多用于重复匹配次数 常用限定字符&#xff1a; 语…

Statefulset部署应用

上一部分我们分享到了使用 RS 没有办法让自己管理的多个 pod 都有一个独立的持久化声明&#xff0c;RS 没有办法在指定模板中对不同的 pod 做差异化处理 使用多个 RS 来分别管理自己的的一个 pod&#xff0c;当我们扩缩容的时候&#xff0c;也会出现问题&#xff0c;老的 pod …

C# 关于使用newlife包将webapi接口寄宿于一个控制台程序、winform程序、wpf程序运行

C# 关于使用newlife包将webapi接口寄宿于一个控制台程序、winform程序、wpf程序运行 安装newlife包 Program的Main()函数源码 using ConsoleApp3; using NewLife.Log;var server new NewLife.Http.HttpServer {Port 8080,Log XTrace.Log,SessionLog XTrace.Log }; serv…

Python 抽象工厂模式介绍、使用

一、抽象工厂模式介绍 概念&#xff1a; Python 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种创建对象的方式&#xff0c;用于创建一系列相关或相互依赖的对象。它为客户端提供了一种创建对象的接口&#xff…

【微服务架构设计】微服务不是魔术:处理超时

微服务很重要。它们可以为我们的架构和团队带来一些相当大的胜利&#xff0c;但微服务也有很多成本。随着微服务、无服务器和其他分布式系统架构在行业中变得更加普遍&#xff0c;我们将它们的问题和解决它们的策略内化是至关重要的。在本文中&#xff0c;我们将研究网络边界可…

使用贝叶斯算法完成文档分类问题

贝叶斯原理 贝叶斯原理&#xff08;Bayes theorem&#xff09;是一种用于计算条件概率的数学公式。它是以18世纪英国数学家托马斯贝叶斯&#xff08;Thomas Bayes&#xff09;的名字命名的。贝叶斯原理表达了在已知某个事件发生的情况下&#xff0c;另一个事件发生的概率。具体…

二十三种设计模式第十七篇--迭代子模式

迭代子模式是一种行为型设计模式&#xff0c;它允许你按照特定方式访问一个集合对象的元素&#xff0c;而又不暴露该对象的内部结构。迭代子模式提供了一种统一的方式来遍历容器中的元素&#xff0c;而不需要关心容器的底层实现。 该模式包含以下几个关键角色&#xff1a; 迭…

计算机网络(1) --- 网络介绍

目录 1.介绍协议 基础知识 协议 协议分层 OSI七层模型 2.TCP/IP五层模型 3.网络传输的基本流程 1.基本知识 协议报头 2.局域网通信的基本流程 3.网络传输流程 局域网分类 跨路由器传输 数据包封装和分用 4.网络中的地址管理 1.IP地址 2.MAC地址 3.区别 1.介绍…