基于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 相关文章推荐
基于jQuery实现点击同时更改两个iframe的网址
Jul 01 Javascript
jquery.validate使用攻略 第一部
Jul 01 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
Dec 26 Javascript
sogou地图API用法实例教程
Sep 11 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
Nov 10 Javascript
javascript等号运算符使用详解
Apr 16 Javascript
每天一篇javascript学习小结(RegExp对象)
Nov 17 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
Jul 05 Javascript
JavaScript运行原理分析
Feb 09 Javascript
基于D3.js实现时钟效果
Jul 17 Javascript
js实现开关灯效果
Mar 30 Javascript
javascript实现倒计时提示框
Mar 02 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
短波收音机简介
2021/03/01 无线电
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
CentOS安装php v8js教程
2015/02/26 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
WebPack基础知识详解
2017/01/16 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
Python实现多并发访问网站功能示例
2017/06/19 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
2019年分享net面试的经历和题目
2016/08/07 面试题
linux面试题参考答案(9)
2015/01/07 面试题
年会主持词结束语
2014/03/27 职场文书
公司保密承诺书
2014/03/27 职场文书
学校班班通实施方案
2014/06/11 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
八月一日观后感
2015/06/10 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS
Python开发五子棋小游戏
2022/04/28 Python