Vue 进阶系列丨自定义指令实现按钮权限功能

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

aa77963bd871a4a477048f74d629a141.png

Vue 进阶系列教程将在本号持续发布,一起查漏补缺学个痛快!若您有遇到其它相关问题,非常欢迎在评论中留言讨论,达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧!


2013年7月28日,尤雨溪第一次在 GItHub 上为 Vue.js 提交代码;2015年10月26日,Vue.js 1.0.0版本发布;2016年10月1日,Vue.js 2.0发布。

最早的 Vue.js 只做视图层,没有路由, 没有状态管理,也没有官方的构建工具,只有一个库,放到网页里就可以直接用了。

后来,Vue.js 慢慢开始加入了一些官方的辅助工具,比如路由(Router)、状态管理方案(Vuex)和构建工具(Vue-cli)等。此时,Vue.js 的定位是:The Progressive Framework。翻译成中文,就是渐进式框架。

Vue.js2.0 引入了很多特性,比如虚拟 DOM,支持 JSX 和 TypeScript,支持流式服务端渲染,提供了跨平台的能力等。Vue.js 在国内的用户有阿里巴巴、百度、腾讯、新浪、网易、滴滴出行、360、美团等等。

Vue 已是一名前端工程师必备的技能,现在就让我们开始深入学习 Vue.js 内部的核心技术原理吧!


什么是自定义指令

有关自定义指令的相关内容,请移步Vue 进阶系列丨自定义指令


适用业务场景

这里简单介绍一下,本篇文章主要解决的业务场景是什么样子的。

在后台管理平台中,我们的菜单权限是根据用户角色的不同动态变化的。

比如说,超级管理员能看到所有的菜单列表(这里说的菜单就是管理平台当中的侧边导航或顶部导航);普通用户只能看到首页等常见的菜单,对于权限比较高的页面,比如说机构管理、角色管理、用户管理等页面,普通用户是看不到的。

这个时候,前端针对菜单的权限,就要采取一些措施了,具体操作请移步Vue 进阶系列丨权限控制 addRoute()

我们这里要讲解的是,针对某个页面的按钮进行权限控制,比如说,角色A的用户拥有机构管理的新增、删除、编辑权限;角色B的用户,拥有机构管理的编辑权限。那么对于角色B的用户来说,机构管理页面中,新增和删除按钮应该是不可见的。这个时候,仅仅是菜单权限控制是满足不了此需求的。


实现步骤

1. 用户登录成功时,将用户权限数据,存入sessionStorage中

// login.vue
<script setup lang='ts'>
  import { useStore } from '@/store'
  const store = useStore()
  
  const login = ()=>{
    // 请求后台接口,拿到相关的用户权限数据
    getUserPermissionApi().then(res=>{
      sessionStorage.setItem('permission',res.data)
      // 示例: 
      // 页面名称:按钮权限名
      // ['organization:add','organization:delete','organization:update']
    }).catch(err=>{
      console.log('拿到用户权限内容报错了')
    })
  }
</script>

1. 在项目根目录下新建一个 permission.ts 文件(这里是以vue-ts为例的)

// permission.ts


// 引入vue中定义的指令对应的类型定义
import { Directive } from 'vue'
export const permission: Directive = {
    // 这是指令的一个生命周期
    mounted(el, binding) {
        // 获取用户使用自定义指令绑定的内容
        const { value } = binding;
        // 获取用户所有的权限
        const permissions = sessionStorage.getItem('permission')
        // 判断用户使用自定义指令,是否使用正确了
        if (value && value instanceof Array && value.length > 0) {
            // 判断传递进来的按钮权限,用户是否拥有
            const hasPermission = permissions.some((per) => {
                return value.includes(per)
            })
            if (!hasPermission) {
                // 当用户没有这个按钮权限时,隐藏这个按钮
                el.style.display = 'none'
            }
        } else {
            throw new Error('按钮权限指令示例: v-permission="['organization:add']"')
        }
    }
}


// 注意,我们这里写的自定义指令,传递内容是一个数组,也就说,按钮权限可能是由
// 多个因素决定的,如果你的业务场景只由一个因素决定,自定义指令也可以不传递一个数组,
// 只传递一个字符串就可以了

3. 挂载到全局

// main.ts


import { createApp } from 'vue'
import App from './App.vue'
// 引用刚刚定义的自定义指令
import { permission } from './permission.ts'
// 注册自定义指令
createApp(App).directive('permission',permission)

4. 在页面中使用,这里我们在机构管理的页面中使用

// organization.vue


<template>
  <button v-permission="['organization:add']">新增按钮</button>
  <button v-permission="['organization:update']">编辑按钮</button
  <button v-permission="['organization:delete']">删除按钮</button
</template>

5. 到这里,我们的自定义指令实现按钮权限的功能就已经实现了!


Vue 进阶系列教程将在本号持续发布,一起查漏补缺学个痛快!若您有遇到其它相关问题,非常欢迎在评论中留言讨论,达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧!

789196479e33e43e73832a8c1a0a44e1.png

叶阳辉

HFun 前端攻城狮

往期精彩:

芒果YOLOv8改进72:动态标签分配策略篇之ATSS:自适应训练样本选择Adaptive Training Sample Selection策略 YOLOv8代码实践|ATSS标签分配策略改进🥭 阅读详情

相关推荐

华为IC岗笔试刷题含答案(2)

又做了几套题,记录了部分及答案,如有错误,欢迎评论指正。

Ingrid的博客 1万+

vue3+ts项目使用自定义指令实现根据角色权限控制显示隐藏

在src目录下新建directives文件夹,然后在文件夹中新建一个permission.ts文件,代码如下 import session from '@/utils/session'; import type { ObjectDirective } from 'vue'; const userInfo = session.get('unified_management_userInfo'); const getRole = () => { if (userInfo && .

weixin_43734732的博客 2000

树莓派与ROS2

树莓派与ROS2(Robot Operating System 2)的结合使用为机器人开发、自动化控制以及物联网项目提供了强大的平台。

weixin_47695827的博客 1756

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

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

我就随便问问 7422

【信息学奥赛一本通】1215:迷宫(bfs版)

同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。每组测试数据的第1行是一个正整数n(1≤n≤100),表示迷宫的规模是n×n的。接下来是一个n×n的矩阵,矩阵中的元素为‘再接下来一行是4个整数ha,la,hb,lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n×n的格点组成,每个格点只有2种状态,.

chu_xiaojie的博客 946

ICM42670 IIC驱动与卡尔曼+四元数姿态解算实战

惯性测量单元(IMU)是运动控制、无人机飞控和AR/VR设备的核心传感器,其数据质量直接取决于底层硬件通信可靠性与姿态估计算法鲁棒性。IIC(I²C)作为嵌入式系统中最常用的低速串行总线,需满足确定性时序、抗干扰与实时采样要求;卡尔曼滤波则通过状态建模与噪声协方差优化,在动态环境中融合加速度计与陀螺仪数据;而四元数因其无万向锁、插值平滑、旋转合成高效等优势,成为高精度姿态解算的数学基础。本文以高性能六轴IMU ICM42670为载体,深入剖析IIC硬件设计要点、裸机级驱动优化、Allan方差驱动的卡尔曼参数

weixin_27076351的博客 256

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

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

qq_34082921的博客 2840

AI赚钱新思路 利用RPA+KIMI实现小红书全自动制作发布(详细攻略)

我已经事先准备好了文案素材,现在就利用Kimi的智能,根据我们已有的文案来创作出新的文案吧。之前我写过一篇关于【:一个戴着用百元大钞制成的简约头饰的少女,她坐在小车里,手里拿着一叠港元,整个画面洋溢着现实主义动漫风格和治愈系的温暖气息。通过这篇文章,我们已经一步步地完成了小红书治愈系文案的创作、治愈系图片的生成,以及笔记的发布,实现了整个流程的自动化。不慌不忙,快乐常在 在繁忙的日常中,给自己的心灵留一片净土,感受内心深处的平静与安宁。接下来,我将展示如何使用影刀来编写自动化脚本,以生成治愈系的图文图片。

weixin_42172073的博客 3697

Vue2自定义指令使用—按钮级别权限控制 + vue3中按钮级别权限控制的扩展

Vue自定义指令使用——按钮级别权限控制 + vue3中按钮级别权限控制的扩展

BMG-Princess 4851

GD32F4系列Keil工程模板搭建全攻略(手把手教学版)

本文提供了一份详细的GD32F4系列Keil工程模板搭建指南。从软件安装、固件库获取、目录规划,到Keil工程创建、文件添加、关键配置(如编译器选项、头文件路径、时钟设置),再到代码定制与常见问题排查,手把手教你构建一个标准化、模块化的开发基础。文章重点介绍了如何利用官方固件库和代码模板,快速建立稳定高效的开发环境,适用于GD32F407等Cortex-M4内核芯片的入门与项目开发。

weixin_29159995的博客 429

YOLOv11缝合改进Conv | SAConv在YOLOv11中的应用可切换空洞卷积与性能提升(附代码)

在本篇文章中,我们将深入探讨如何通过引入**SAConv**(Switchable Atrous Convolution,可切换空洞卷积)来优化YOLOv11网络结构,特别是在卷积操作方面的创新。我们会解析SAConv的核心原理和架构设计。

一键难忘的博客 955

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

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

weixin_34321977的博客 1万+

深度强化学习在足式机器人中的应用 (一):基础原理与仿真环境

我们将首先深入探讨其背后的核心挑战与技术栈,然后详细推导机器人学和强化学习的基本数学原理,特别是剖析在机器人控制领域表现卓越的PPO算法。下面的独立Python脚本展示了Isaac Gym的基本API用法,加载一个Go1机器人(假设URDF已准备好),并让它执行一个简单的预设动作(正弦波运动),以此来熟悉仿真流程。:代码的核心是直接操作GPU上的PyTorch张量,避免了CPU和GPU之间的数据拷贝,这是实现高性能的关键。:所有计算(如伪策略中的正弦波计算)都应该是向量化的,一次性为所有。

VectorShift的博客 228

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

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

语霖BABA的博客 4098

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

a123456234的博客 1495

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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 自定义指令 实现 按钮权限

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

白日强的博客 2006

Vue通过指令控制按钮权限

除了 Vue 内置的一系列指令 (比如v-model或v-show) 之外,Vue 还允许你注册自定义的指令 (Custom Directives)。

qq_42898915的博客 1053

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

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

i-cat的博客 1815

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

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

setsunadoudou的博客 959

Vue3 按钮权限控制(自定义指令)

很多后台管理系统会用到权限管理。菜单权限比较好控制,按钮权限相对来说复杂一些,在此以Vue3为例,介绍如何通过自定义指令来判断是否拥有权限,动态控制按钮的显示(无废话)

m0_59420288的博客 3244

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

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

且听风吟的博客 1880

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

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

M_emory_的博客 1132

vue 按钮权限的控制

在后台管理项目中,往往会有多种角色的人员操作系统,这时就需要对每种角色进行分权限,我们简单讲下按钮级别的权限前端的实现思路,菜单权限鉴定请看 1.页面展示需要鉴权的所有按钮,像有些查询功能的接口可直接用菜单控制权限,即可显示菜单即可查看数据。 2.勾选每个角色或者用户所能看的权限保存在数据库。该权限数据是一个权限字段的数组。 3.在main.js中定义判定按钮权限数据的方法,一般为vue的指令directive,登入时获取后端保存的数据权限数组。 4.在每个按钮中调用该指令,并传入该操作的权限字段和

盖世小可爱的博客 3072

vue项目中按钮权限控制之自定义指令

vue项目中,有的情况下,你需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。 这里我们自定义一个按钮权限控制的指令 import Vue from 'vue' import store from '@/store' /**权限指令**/ Vue.directive('has', { bind: function (el, binding) { if (!Vue.pro...

qiuzhf 3909

Vue自定义指令使用——按钮级别权限控制

简单的Vue自定义指令 vue.js官网自定义指令 scss官网(推荐学习样式,搭配vue写起来真的很爽很省事,还给小白一种高大上的感觉,哈哈哈哈~) key:自定义指令 scss 的 @each in 需求说明: 我接到的需求是,通过配置后台,配置每个页面的的按钮展示,配置成功的则展示按钮,不成功或者未配置的则不展示。不过,在开发中要注意: 1.未配置按钮时,默认展示还是隐藏(跟产品确认后,选择了默认隐藏)。 2.注意样式调整,有些按钮的展示隐藏会影响布局。 这种需求已经很常见了,也依赖数据结构,

DongShuXianSheng的博客 1575
上一篇: Vue 进阶系列丨Vuex+TS 代码提示
下一篇: Vue 进阶系列丨Pinia 的基本使用
HFun TM
博客等级 码龄5年 98粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值