基于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 相关文章推荐
JS array 数组详解
Mar 22 Javascript
JavaScript之引用类型介绍
Aug 10 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
Feb 07 Javascript
javascript强制点击广告的方法
Feb 06 Javascript
js如何打印object对象
Oct 16 Javascript
利用 spin.js 生成等待效果(js 等待效果)
Jun 25 Javascript
parabola.js抛物线与加入购物车效果的示例代码
Oct 25 Javascript
vue改变对象或数组时的刷新机制的方法总结
Apr 24 Javascript
vue elementUI table 自定义表头和行合并的实例代码
May 22 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
Oct 21 Javascript
vue element-ui实现动态面包屑导航
Dec 23 Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 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
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
php cli换行示例
2014/04/22 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
常用python编程模板汇总
2016/02/12 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
有关打架的检讨书
2014/01/25 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
节能减耗标语
2014/06/21 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书