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 相关文章推荐
基于jQuery的实现简单的分页控件
Oct 10 Javascript
jquery删除提示框弹出是否删除对话框
Jan 07 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
Feb 10 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
Sep 20 Javascript
AngularJS创建自定义指令的方法详解
Nov 03 Javascript
CSS+jQuery实现简单的折叠菜单
Dec 20 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
Feb 21 Javascript
jQuery实现 上升、下降、删除、添加一行代码
Mar 06 Javascript
关于vue.js组件数据流的问题
Jul 26 Javascript
javascript实现fetch请求返回的统一拦截
Dec 22 Javascript
Vue中fragment.js使用方法小结
Feb 17 Javascript
Vue实现点击当前行变色
Dec 14 Vue.js
百度小程序自定义通用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
php 代码优化的42条建议 推荐
2009/09/25 PHP
PHP 柱状图实现代码
2009/12/04 PHP
PHP四舍五入精确小数位及取整
2014/01/14 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
JavaScript学习笔记之数组的增、删、改、查
2016/03/23 Javascript
常用的javascript设计模式
2017/01/11 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
2018/08/23 jQuery
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
python操作ie登陆土豆网的方法
2015/05/09 Python
机器学习python实战之手写数字识别
2017/11/01 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
python实现简单的购物程序代码实例
2020/03/03 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
2020/03/16 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
六个一活动实施方案
2014/03/21 职场文书
大学生操行评语大全
2014/12/31 职场文书
python 实现mysql自动增删分区的方法
2021/04/01 Python
python实现的web监控系统
2021/04/27 Python
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android
spring boot实现文件上传
2022/08/14 Java/Android