vue 按钮 权限控制

2023-10-26

vue 按钮 权限控制

前言

在日常项目中,会碰到需要根据后台接口返回的数据,来判断当前用户的操作权限。必须当有删除权限时,就显示删除按钮。没有这个权限时,就不显示或者删除这个按钮。通过查找资料,通过vuex来实现这个功能。

步骤

1.定义buttom权限

state中创建buttomPermission,用于保存后台接口返回的权限数据。

setPermission用于接受数据,将页面权限管理传入到buttomPermission对象中。

使用vuex
Vue.use(Vuex)

创建vue实例
const store = new Vuex.Store({
    state: {
        buttomPermission: {}
    },
    mutations: {
        setPermission(state, permission) {
            state.buttomPermission = permission
        }
    }
})
export default store
2.定义store
import store from './store/index.js'

new Vue({
    store,
    el: '#app',
    render: h => h(App)
})
3.创建permission指令

新建directives文件夹,创建permission.js文件。

这里使用inserted函数,在被绑定元素插入父节点时检测该元素是否有权限。

inserted( el, bindings, vnode ) { }
4.使用permission指令

在按钮页面引入和定义 permission指令,并且在buttom中写入指令,绑定指令中相对于的值。

 <button v-permission="'add'">添加</button>
import permission from './directives/permission'
directives: {permission,},
5.删除无权限数据

permission指令,通过bindings获取该按钮绑定的value值,然后在buttomPermission对象中找到,然后判断是否有权限,如果没有权限,则删除该节点。

inserted(el, bindings, vnode) {
        let btnPermissionValue = bindings.value;
        let boolean =vnode.context.$store.state.buttomPermission[btnPermissionValue];
        !boolean && el.parentNode.removeChild(el);
    }
6.传入状态管理数据

将状态管理数据,通过setPermission方法传入到权限管理中

let permissions = {}
this.$store.commit("setPermission", permissions);

概况

总的来说,就是通过vuex定义一个buttomPermission权限状态对象,然后再创建一个permissions指令,通过对每个buttom按钮使用permissions指令,并且绑定该按钮特定意义的值。然后在permission.js文件中,获取当前value值,从buttomPermission中得到当前按钮是否有权限,没有则直接删除掉当前按钮节点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue 按钮 权限控制 的相关文章

  • 如何在Vue.js中添加一堆全局过滤器?

    我想在 Vue js 应用程序中使用一些全局过滤器 我知道我需要在主 Vue 实例之前定义它们 但从代码组织的角度来看 将它们全部放在 main js 文件中对我来说似乎并不正确 我怎样才能将定义放在一个单独的文件中 导入到 main js
  • 如何在 vuejs 中使用 bootstrap 4 主题

    有多个 Bootstrap 4 主题可以让网站的样式和布局变得简单 其中一些要求您的资产文件夹以非常特定的方式布局 例如 https htmlstream com public preview stream ui kit docs html
  • Vuetify v-select 组件宽度改变

    My v select组件应该有固定的宽度 60px 它们适合表格单元格 我想防止它们在选择值后更改宽度 它们会更改宽度 并且下拉箭头在选择后会向右移动 因此如果有办法减小图标或其填充 边距的大小 可能会有所帮助 真的不知道如何获取这个箭头
  • 如何在 Vue.js 插槽范围内传递方法

    我在 vuejs 中使用插槽范围 效果很好 我可以将任何我想要的东西传递到插槽中 如下所示
  • Vue:v-model 不适用于动态组件

    例如
  • 为 v-html 添加 CSS 样式

    我想在 HTML 代码中添加样式v html 我尝试了几种解决方案 但没有任何功能 这是我的代码 模板 div class para div 脚本 export default data return value h2 TITLE h2 p
  • Axios-一次发出多个请求(vue.js)

    如何使用 axios 和 vue 并行发出多个请求 由于 axios 可以被 React 和 Vue 使用 因此代码几乎相同 请务必阅读axios 文档 https github com axios axios 你可以从那里理解它 无论如何
  • 停止接收来自被破坏的子组件的事件

    我有一个父级 我可以在其中动态添加子组件 当在挂载中添加子组件时 我为事件注册一个侦听器 EventBus on content type saving function logic here 问题是 当通过从子组件数组中删除该组件而在父组
  • vue/vuetify 模态模式或最佳实践设计

    在我正在开发的应用程序中 我们有很多模态 每个模态包含少量数据 通常是 2 3 个字段 有时是复选框 列表等 问题是当组件关闭时如何从内部重置 销毁组件 造成这种情况的原因有两个 1 不必清除每个模式上的各个数据字段 2 当第二次打开模式时
  • Prismic - 如何在不暴露访问令牌的情况下进行 API 调用

    我正在构建一个 vue js Web 应用程序 我想对我的 prismic 存储库进行相应的调用 但我不知道如何在不暴露我的访问令牌的情况下执行此操作 我正在使用所示的其余 api 方法here https prismic io docs
  • VueJS 在内联模板组件中重新编译 HTML

    我已经包装了 bootstrapTable https github com wenzhixin bootstrap table https github com wenzhixin bootstrap table 到指令中 如下所示 Vu
  • 同时使用 Vuetify 和 Vue-i18n 翻译

    我正在使用 Vuetify 想要添加我自己的按钮翻译 并使用 Vuetify 提供的翻译 我目前的 Vuetify 配置文件设置如下 import Vue from vue import Vuetify from vuetify impor
  • bootstrap-vue 与 b 表中的复选框相关的问题

    我在使复选框正常工作时遇到问题 为 选定 槽中的每一行呈现的复选框未绑定到正确的行 当您单击该复选框时 它将顶行的复选框设置为真 假位置 问题 1 如何将行复选框的真 假状态绑定到其行项目 我试图将其绑定到 data item select
  • 如何在Nuxt Js中使用Google Map API?

    下面是我在 Nuxt Js 中获取 API 的代码 我已经编写了用于调用 API 的代码 但没有得到结果 我也没有得到任何与此相关的资源 async created const config headers Accept applicati
  • 使用 v-bind Vue.js 的多个变量

    我试图在以下代码中传递多个变量 div div 但我收到以下错误 Vue warn 无法生成渲染函数 SyntaxError 意外的标记 在 我尝试更换 with a 但我得到 Vue warn 无法生成渲染函数 SyntaxError I
  • Vue - API 调用属于 Vuex 吗?

    我正在努力寻找在 vue 模块中理想的 API 调用位置的答案 我不是在构建 SPA 例如 我的 auth 块有几个用于登录 密码重置 帐户验证等的组件 每个块都使用 axios 进行 API 调用 Axios 已经提供了异步的 Promi
  • Vue.js - 如何获取 v-for 子组件中的最后一个子引用

    我想在页面加载后播放最新的音频
  • Vue Cli 3 禁用代码分割 - 无法删除哈希文件

    我有一个vue config js设置效果很好 并取消了默认的代码分割 但它仍然输出一个 CSS 文件 其哈希值与具有好名称的 CSS 文件相同 我可以编写一个脚本来删除它 但我想知道是否有一种方法可以将文件设置为不输出带有哈希的CSS文件
  • Vue cli 3项目,图像路径中的动态src不起作用

    我在 vue 组件中引用图像 url 例如 img alt Vue logo src statics reports logo png 这有效 但在尝试的同时 img alt Vue logo data return imgPath sta
  • Vue.js 路由器 - 条件组件渲染

    routes path name home get component if Vue loggedIn return Home else return Login 我添加了一个吸气剂 似乎工作正常 但我在 if 语句中使用的任何变量或函数都

随机推荐

  • Linux:WSL 下 CTS 环境搭建及无法识别设备问题

    WSL Windows Subsystem for Linux 简称WSL 是一个在Windows 10上能够运行原生Linux二进制可执行文件 ELF格式 的兼容层 它是由微软与Canonical公司合作开发 其目标是使纯正的Ubuntu
  • mysql [Err] 1118 - Row size too large (> 8126).

    错误代码 1118 Row size too large gt 8126 Changing some columns to TEXT or BLOB may help In current row format BLOB prefix of
  • 获取服务器系统,获取服务器操作系统

    获取服务器操作系统 内容精选 换一换 服务器安装上架 服务器基础参数配置 安装操作系统等操作请参见 Atlas 500 Pro 智能边缘服务器 用户指南 型号 3000 安装操作系统完成后 配置业务网口IP地址 请参见配置网卡IP地址 At
  • arduinows2812灯条程序_Arduino 控制WS2812 LED灯条

    传统的LED限制总是很多 比如需要很多的引脚 所以有一种很好的解决方案是用灯条 理论上这种灯条可以通过通讯 用一根数据总线可以控制达到无上限个数的RGB LED灯珠 并且在数量在1024以下时 延迟是不可察觉的 使用手册可查 主要功能 通过
  • Day 3 Mastering the Interface Definition Language (IDL)

    Teach Yourself CORBA In 14 Days Day 3Mastering the Interface Definition Language IDL Overview IDL Ground Rules Case Sens
  • momentJS时间加减处理

    计算最近在使用JavaScript计算时间差的时候 发现很多问题需要处理 在查看momentJS之后 发现非常容易 console log moment format YYYY MM DD HH mm ss 当前时间 console log
  • 基于nodejs的在线跑腿管理系统

    末尾获取源码 开发语言 nodejs 框架 Express 数据库 MySQL5 7 数据库工具 Navicat 11 开发软件 Hbuilder VS code 浏览器 edge 谷歌 目录 一 项目简介 二 系统功能 三 系统项目截图
  • go语言context保存上下文

    contxt保存上下文适合全局参数传递 而普通的参数传递就没必要用context 因为不好维护 关于context具体用法可以参考 https studygolang com articles 23247 fr sidebar packag
  • java函数的定义方法_java函数的定义以及使用方法介绍

    java函数的定义以及使用方法介绍 发布时间 2020 04 24 16 28 40 来源 亿速云 阅读 116 作者 小新 今天小编给大家分享的是java函数的定义以及使用方法介绍 相信很多人都不太了解 为了让大家更加了解java函数 所
  • AJAX&&JSON

    课程笔记Day46 AJAX JSON 综合案例 第一章 AJAX 第01节 基础理论 1 概念说明 1 什么是 AJAX AJAX是一项技术合集 他是由一套技术组合得到的新技术方案 异步请求技术 2 AJAX有什么作用呢 使用Ajax技术
  • C++ 删除文本数据中第一个元素

    由于项目需要删除第一个字符 然后按照相同顶格显示 如下 v 279 268005 37 345402 2 081520 v 280 971985 37 074699 1 353890 v 279 015991 44 888100 1 609
  • 手把手教你搭建国产嵌入式模拟器SkyEye开发环境

    SkyEye介绍 SkyEye是一个开源软件 OpenSource Software 项目 中文名字是 天目 SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境 模拟常见的嵌入式计算机系统 这里假定 仿真
  • 《编译原理》笔记整理

    编译原理 笔记整理 1 1 编译原理 引论 基本概念 发展 机器语言 汇编语言 高级语言 工具语言 基本概念 翻译程序 把某一种语言程序 称为源语言程序 等价的转换成另一种语言程序 称为目标语言程序 的程序 如 中英互译系统 DBMS语言
  • Java工程师成长之路

    Java工程师成长之路 李颜芯 欢迎大家收看CSDN的视频节目 今天我们的有关话题是Java工程师的成长之路 今天我们请到两位老师 和我们一起探讨这个问题 首先请两位老师作一下自我介绍 李翊 大家好 我是来自于东方标准人才服务有限公司 原来
  • 深度学习安装篇之二:ubuntu18.04+pycharm-2021.3安装

    一 软件下 载 1 申请学生或教师用户 可以免费使用专业版本 有学校的电子邮箱edn or 社区免费版 2 官网下载软件 PyCharm the Python IDE for Professional Developers by JetBr
  • arduino-esp32:LVGL中文字库(通用)

    导航 概述 系统自带中文字库 使用自带中文字库 制作专属字库 使用专属字库 VS模拟器 效果 arduino esp32 效果 小结 概述 标题是arduino esp32只是因为平台是这个 LVGL默认的字库是英文的 当然其字库文件里也有
  • 华为OD机试 Python 【食堂供餐】

    题目 员工食堂现在供应盒饭 我们的目标是让员工不用排队直接取餐 根据过去的取餐统计 我们想知道每单位时间 食堂至少要制作多少盒饭 才能确保每个员工都不用等待 输入 3 14 10 4 5 输出 3 输入 3 这表示在一个特定的时间段内 共有
  • YOLO综述:从YOLOV1到YOLOV8

    YOLO综述 从YOLOV1到YOLOV8 ABSTRACT 1 Introduction 2 YOLO Applications Across Diverse Fields 3 Object Detection Metrics and N
  • nginx报错nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)

    nginx error open run nginx pid failed 2 No such file or directory 日期 2018 11 03 来源 Linux公社 作者 醉落红尘 字体 大 中 小 CentOS 7 5下启
  • vue 按钮 权限控制

    vue 按钮 权限控制 前言 在日常项目中 会碰到需要根据后台接口返回的数据 来判断当前用户的操作权限 必须当有删除权限时 就显示删除按钮 没有这个权限时 就不显示或者删除这个按钮 通过查找资料 通过vuex来实现这个功能 步骤 1 定义b