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 相关文章推荐
tangram框架响应式加载图片方法
Nov 21 Javascript
setTimeout()与setInterval()方法区别介绍
Dec 24 Javascript
使用javascript实现判断当前浏览器
Apr 14 Javascript
JQuery操作textarea,input,select,checkbox方法
Sep 02 Javascript
webpack2.0搭建前端项目的教程详解
Apr 05 Javascript
微信小程序自定义导航隐藏和显示功能
Jun 13 Javascript
详细分析jsonp的原理和实现方式
Nov 20 Javascript
React 使用Hooks简化受控组件的状态绑定
Mar 18 Javascript
element-ui多文件上传的实现示例
Apr 10 Javascript
vue实现评价星星功能
Jun 30 Javascript
Element InputNumber 计数器的实现示例
Aug 03 Javascript
ES11屡试不爽的新特性,你用上了几个
Oct 21 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
10个php函数实用却不常见
2015/10/13 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
Python中的字典遍历备忘
2015/01/17 Python
python学习入门细节知识点
2018/03/29 Python
python实现最长公共子序列
2018/05/22 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
巴西网上药房:onofre
2016/11/21 全球购物
苹果音乐订阅:Apple Music
2018/08/02 全球购物
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
产品促销活动策划书
2014/01/15 职场文书
计算机个人求职信范例
2014/01/24 职场文书
模范家庭事迹材料
2014/02/10 职场文书
商务日语专业自荐信
2014/04/17 职场文书
保险公司演讲稿
2014/09/02 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
2014年协会工作总结
2014/11/22 职场文书
初中英语教学反思范文
2016/02/15 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸