Vue项目实现简单的权限控制管理功能


Posted in Javascript onJuly 17, 2019

在Vue项目中实现权限控制管理

对于一般稍大一些的后台管理系统,往往有很多个人员需要使用,而不同的人员也对应了不同的权限系统,后端的权限校验保障了系统的安全性,而前端的权限校验则提供了优秀的交互体验。

校验方式

前端对用户的权限信息进行校验往往在两个方面进行限制

  • 路由不可见
  • 元素不可见

通过以上两个方式,来将用户权限之外的内容隐藏掉。

路由不可见实现方法

在router.js中的meta字段中加入该路由的访问权限列表

{
  path: 'edit',
  name: 'edit',
  meta: {
    title: '编辑账户',
    auths:['edit_account']
  },
  component: () => import('pathToComponent/component.vue'),
},

Vue.router中提供了导航守卫,我们这里使用 全局前置守卫 对路由跳转进行权限校验

router.beforeEach(to,from,next)

参数 to 是即将进入的路由对象,我们可以在对象中拿到之前在router.js中定义的 route 对象,并获得 auths 字段

router.beforeEach((to,from,next)=>{
  const hasAuth = function(needAuths,haveAuths){   //判断用户是否拥有权限的function
    // implement 
  }
  const havaAuths = []; // 用户拥有的权限列表
  if(!hasAuth(to.meta.auths,haveAuths)){
    //没有权限重定位到其他页面,往往是401页面
    next({replace:true,name:'otherRouteName'})
  }
  //权限校验通过,跳转至对应路由
  next();
})

在有侧边栏的后台管理中,还需要对侧边栏的路由导航进行隐藏,这里同样是通过拿到 route.meta.auths 字段进行过滤。

元素不可见实现方法

因为某些页面中会有一些特殊的接口调用或数据展示受到权限控制显示。前端通过控制元素的展示来隐藏掉用户不具有权限的元素,避免点击了某一个button导致接口401报错这样不友好的交互体验。

全局注册一个directive, directive官网介绍 。

//acl.js
const aclDirective = {
  inserted:function(el,binding){ // 在被绑定的元素插入到dom中时
    const hasAuth = function(needAuths,haveAuths){ //判断用户是否拥有权限的function
      // implement 
    }
    const havaAuths = []; // 用户拥有的权限列表
    if(!hasAuth(binding.value,haveAuths)){ //binding.value 可以获得绑定指令时传入的参数
      el.style = "display:none"; //修改元素的可见状态
    }
  }
}
//main.js
Vue.directive('acl',aclDirective); //全局注册指令

在需要控制显示的组件上我们就可以通过 v-acl 进行权限控制

<button v-acl="['edit_access']">编辑账户</button>

总结

以上所述是小编给大家介绍的Vue项目实现简单的权限控制管理功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JS 获取span标签中的值的代码 支持ie与firefox
Aug 24 Javascript
javascript中注册和移除事件的4种方式
Mar 20 Javascript
javascript标签在页面中的位置探讨
Apr 11 Javascript
jQuery实现单击和鼠标感应事件
Feb 01 Javascript
浏览器中url存储的JavaScript实现
Jul 07 Javascript
jQuery实现的导航下拉菜单效果
Jul 04 Javascript
jQuery组件easyui基本布局实现代码
Aug 25 Javascript
js实现登录框鼠标拖拽效果
Mar 09 Javascript
React-intl 实现多语言的示例代码
Nov 03 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
Apr 08 Javascript
浅谈发布订阅模式与观察者模式
Apr 09 Javascript
Vue 中如何正确引入第三方模块的方法步骤
May 05 Javascript
百度小程序自定义通用toast组件
Jul 17 #Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
Jul 16 #Javascript
JS实现返回上一页并刷新页面的方法分析
Jul 16 #Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
Jul 16 #Javascript
微信小程序-API接口安全详解
Jul 16 #Javascript
jquery实现垂直无限轮播的方法分析
Jul 16 #jQuery
JavaScript解析JSON数据示例
Jul 16 #Javascript
You might like
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
PHP的FTP学习(一)[转自奥索]
2006/10/09 PHP
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
PHP序列号生成函数和字符串替换函数代码
2012/06/07 PHP
php进程间通讯实例分析
2016/07/11 PHP
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
精细化工应届生求职信
2013/11/17 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
python自动化调用百度api解决验证码
2021/04/13 Python
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
MySQL 字符集 character
2022/05/04 MySQL