当前位置: 首页 > news >正文

Vue 新手学习笔记:vue-element-admin 之按钮级权限管控

随着软件的发展,网站从最初的满足用户业务需求到提升用户。就比如一个按钮只要求权限方面的管控我们可以通过 shiro,注解等方式来实现,但是页面上用户点击后没反应或者点击后弹框没权限,这显然不是一个好的用户体验,因此通过前端来实现权限管控也是很有必要的。

思路

1.获取按钮权限
2.按钮权限保存在前端全局中 vuex
3.页面加载按钮时通过判断权限的存在与否,控制按钮的显示隐藏或者样式选择

PS:事实证明,思路清晰,实现起来就很容易,没几行代码

表结构与数据

就表结构方面设计上不管有哪些字段,我们需要一个字段来存储唯一权限,其他都是浮云,如图

打印看看获取到的数据

可以看到我只返回了权限数组,因为其他字段没有意思,当然直接返回对象也是 ok 的

实现

先来添加下 vuex 全局变量,方便后面获取到按钮权限后进行存储

/src/store/modules/user

新增 button 全局变量,并在新增 mutations 操作 button

   

为啥是在这,因为按钮的权限是属于每个用户的

/src/store/getters

使用时我们一般需要通过这个东西来获取全局变量中的值
这个 state.user.button 以我的理解就是上图中 user 对象下的 button

/src/store/modules/user

回到 user 文件,现在我们可以把取到的 button 权限放到全局变量中就行了

做过权限模块的都知道这个 GetUserInfo 方法,每次缓存失效后,都会调用这个方法去获取必要的用户信息,这里按钮权限我也是在这里直接返回获取。
如果说你的按钮权限时单独写的,你也可以在这个文件里写个获取的方法,然后再 permission 文件里去调用,如图

当然我不太建议单独去获取,因为由于vue自身特性的原因,vuex中的数据在页面刷新之后其中的数据会初始化,也就是数据没了,这个时候就会去调用后台去获取数据,如果每次都去单独获取,在高并发等情况下这种频繁的重复数据的请求会给数据库带来巨大的压力,因此像一些用户权限数据,我比较建议在登陆时统一获取后保存到 redis 这种地方,以后的请求都只需要从 redis 取就可以了,效率上也会得到巨大的提升。

按钮调用

调用就很简单了,直接获取全局中的权限,用 v-if 判断是否包含这个按钮就行了,includes 后面的字符串就是对应这个按钮的权限
PS:如果存储起来的不是这种简单的字符串数组,也可以改为 some 函数去判断

相关文章:

  • SpringBoot 集成 Druid 配置及数据库密码加密
  • MySQL 集群(一):Docker 搭建 MySQL,MySQL 主从同步搭建及踩坑
  • MySQL 集群(二):Atlas 结合 Docker MySQL 实现读写分离与验证
  • Jenkins + Docker 部署,使用,持续集成以及踩坑
  • Docker 删除 Exited 容器以及删除 none 镜像
  • LeetCode Java 深度优先算法(DFS)实现岛屿个数计算,附带详细分析
  • LeetCode Java 队列结合广度优先算法(BFS)实现岛屿个数计算,附带详细分析
  • navicat连接oracle报错:ORA-12737 Instant Client Light:unsupported server character set ZHS16GBK
  • Spring Boot,Spring Cloud,Spring Cloud Alibaba 版本选择说明以及整理归纳
  • RestTemplate 工具类
  • SpringCloud 之 Ribbon
  • SpringCloud 之 Hystrix 断路器,服务降级,自定义配置
  • Oracle 让指定数据排在最前面
  • Gitlab 之 Windows 环境进行 tomcat 持续集成部署,包含项目打包,备份,部署以及问题
  • Git 克隆指定分支的代码
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【刷算法】求1+2+3+...+n
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • CSS 三角实现
  • ES6 ...操作符
  • js面向对象
  • Mysql5.6主从复制
  • Python学习之路16-使用API
  • Redis的resp协议
  • TypeScript实现数据结构(一)栈,队列,链表
  • 不上全站https的网站你们就等着被恶心死吧
  • 代理模式
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 好的网址,关于.net 4.0 ,vs 2010
  • 算法-插入排序
  • 由插件封装引出的一丢丢思考
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 字符串匹配基础上
  • 交换综合实验一
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​ssh免密码登录设置及问题总结
  • ​马来语翻译中文去哪比较好?
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #laravel 通过手动安装依赖PHPExcel#
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (一)RocketMQ初步认识
  • (一)认识微服务
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转) Android中ViewStub组件使用
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .form文件_一篇文章学会文件上传