基于Vue自定义指令实现按钮级权限控制思路详解


Posted in Javascript onMay 23, 2018

思路:

  • 登录:当用户填写完账号和密码后向服务端验证是否正确,验证通过之后,服务端会返回一个token,拿到token之后(我会将这个token存贮到sessionStorage中,保证刷新页面后能记住用户登录状态),前端会根据token再去拉取一个 user_info 的接口来获取用户的详细信息(如用户权限,用户名等等信息)。
  • 权限验证:通过token获取用户对应的 role,自定义指令,获取路由meta属性里btnPermissions( 注: meta.btnPermissions是存放按钮权限的数组,在路由表里配置 ),然后判断role是否在btnPermissions数组里,若不在即删除该按钮DOM。

按钮权限也可以用v-if判断,但是如果页面过多,每个页面页面都要获取用户权限role和路由表里的meta.btnPermissions,然后再做判断,感觉有点麻烦,而自定义指令,只需在权限按钮加入该指令即可。

废话不多说,上代码...

路由配置:

path: '/permission',
  component: Layout,
  name: '权限测试',
  meta: { btnPermissions: ['admin','supper','normal'] }, //页面需要的权限
  children: [
   {
    path: 'supper',
    component: _import('system/supper'),
    name: '权限测试页',
    meta: { btnPermissions: ['admin','supper'] } //页面需要的权限
   },
   {
    path: 'normal',
    component: _import('system/normal'),
    name: '权限测试页',
    meta: { btnPermissions: ['admin'] } //页面需要的权限
   }
  ]

自定义指令:

import Vue from 'vue'
/**权限指令**/
const has = Vue.directive('has', {
 bind: function (el, binding, vnode) {
  // 获取按钮权限
  let btnPermissions = vnode.context.$route.meta.btnPermissions.split(",");
  if (!Vue.prototype.$_has(btnPermissions)) {
   el.parentNode.removeChild(el);
  }
 }
});
// 权限检查方法
Vue.prototype.$_has = function (value) {
 let isExist = false;
 let btnPermissionsStr = sessionStorage.getItem("btnPermissions");
 if (btnPermissionsStr == undefined || btnPermissionsStr == null) {
  return false;
 }
 if (value.indexOf(btnPermissionsStr) > -1) {
  isExist = true;
 }
 return isExist;
};
export {has}

然后在main.js文件引入文件

import has from './public/js/btnPermissions.js';

页面中按钮只需加v-has即可

<el-button @click='editClick' type="primary" v-has>编辑</el-button>

结语:

权限这种事需要前后端结合,前端尽可能的去控制,记住:永远不相信用户输入!

以上所述是小编给大家介绍的基于Vue自定义指令实现按钮级权限控制,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript中Math对象使用说明
Jan 16 Javascript
jquery tools之tabs 选项卡/页签
Jul 25 Javascript
超简单的jquery的AJAX用法
May 10 Javascript
js下将字符串当函数执行的方法
Jul 13 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
Dec 20 Javascript
jQuery实现tag便签去重效果的方法
Jan 20 Javascript
js中substring和substr两者区别和使用方法
Nov 09 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
Jun 11 Javascript
vue表单自定义校验规则介绍
Aug 28 Javascript
简单了解JavaScript中常见的反模式
Jun 21 Javascript
JS常见错误(Error)及处理方案详解
Jul 02 Javascript
react使用antd表单赋值,用于修改弹框的操作
Oct 29 Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 #Javascript
JavaScript+H5实现微信摇一摇功能
May 23 #Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
May 23 #Javascript
vue动态路由配置及路由传参的方式
May 23 #Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
May 23 #Javascript
深入剖析Node.js cluster模块
May 23 #Javascript
Node.js进阶之核心模块https入门
May 23 #Javascript
You might like
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
xss文件页面内容读取(解决)
2010/11/28 Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
2011/09/20 Javascript
JavaScript 验证码的实例代码(附效果图)
2013/03/22 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
js打造数组转json函数
2015/01/14 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
使用python装饰器验证配置文件示例
2014/02/24 Python
Python多进程同步简单实现代码
2016/04/27 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
Python eval函数原理及用法解析
2020/11/14 Python
海外淘书首选:AbeBooks
2017/07/31 全球购物
优秀士兵先进事迹
2014/02/06 职场文书
工程技术员岗位职责
2014/03/02 职场文书
大学生两会精神学习心得体会
2014/03/10 职场文书
消防安全宣传口号
2014/06/10 职场文书
大学第二课堂活动总结
2014/07/08 职场文书
行政二审代理词
2015/05/25 职场文书