基于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面向对象 理解javascript原型和原型链
Jan 04 Javascript
JS去除空格和换行的正则表达式(推荐)
Jun 14 Javascript
JS实现类似51job上的地区选择效果示例
Nov 17 Javascript
Bootstrap 模态框实例插件案例分析
Dec 28 Javascript
使用原生的javascript来实现轮播图
Feb 24 Javascript
原生js实现简单的Ripple按钮实例代码
Mar 24 Javascript
解决VUEX兼容IE上的报错问题
Mar 01 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
Mar 06 jQuery
详解JS取出两个数组中的不同或相同元素
Mar 20 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
Jul 31 Javascript
Javascript Dom元素获取和添加详解
Sep 24 Javascript
jQuery实现容器间的元素拖拽功能
Dec 01 jQuery
详解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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
写了个监控nginx进程的Python脚本
2012/05/10 Python
python实现得到一个给定类的虚函数
2014/09/28 Python
在Python的Django框架中显示对象子集的方法
2015/07/21 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
Python目录和文件处理总结详解
2019/09/02 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
python的help函数如何使用
2020/06/11 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
Html5自定义字体解决方法
2019/10/09 HTML / CSS
2014年质检工作总结
2014/11/26 职场文书
质检员岗位职责范本
2015/04/07 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
新手入门Mysql--概念
2021/06/18 MySQL
springboot实现string转json json里面带数组
2022/06/16 Java/Android