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 相关文章推荐
input 高级限制级用法
Mar 26 Javascript
js 实现无缝滚动 兼容IE和FF
Jul 15 Javascript
JavaScript Event学习第七章 事件属性
Feb 07 Javascript
javascript判断iphone/android手机横竖屏模式的函数
Dec 20 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
Feb 04 Javascript
解析JavaScript中的标签语句
Jun 19 Javascript
IE中鼠标经过option触发mouseout的解决方法
Jan 29 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
Feb 25 Javascript
babel之配置文件.babelrc入门详解
Feb 22 Javascript
VUE DOM加载后执行自定义事件的方法
Sep 07 Javascript
vue项目使用.env文件配置全局环境变量的方法
Oct 24 Javascript
vue 使用localstorage实现面包屑的操作
Nov 16 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
PHP开发中常用的字符串操作函数
2011/02/08 PHP
php通过session防url攻击方法
2014/12/10 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
Javascript继承机制的设计思想分享
2011/08/28 Javascript
JavaScript根据数据生成百分比图和柱状图的实例代码
2013/07/14 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
岗位职责的定义
2013/11/10 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
美食节策划方案
2014/05/26 职场文书
学校班班通实施方案
2014/06/11 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
五年级语文教学反思
2016/03/03 职场文书
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫
Redis+AOP+自定义注解实现限流
2022/06/28 Redis