基于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加载执行优化的研究报告
Dec 16 Javascript
js全选实现和判断是否有复选框选中的方法
Feb 17 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
Aug 05 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
Nov 15 Javascript
JS作用域深度解析
Dec 29 Javascript
BootStrap组件之进度条的基本用法
Jan 19 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
Aug 24 Javascript
详解动画插件wow.js的使用方法
Sep 13 Javascript
基于vue实现可搜索下拉框定制组件
Mar 26 Javascript
JS实现全屏预览F11功能的示例代码
Jul 23 Javascript
JS实现的碰撞检测与周期移动完整示例
Sep 02 Javascript
Layui Table js 模拟选中checkbox的例子
Sep 03 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
mysql limit查询优化分析
2008/11/12 PHP
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
使用jQuery和PHP实现类似360功能开关效果
2014/02/12 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
JS控制TreeView的结点选择
2016/11/11 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
jQuery操作之效果详解
2017/05/19 jQuery
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
react 生命周期实例分析
2020/05/18 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
[59:08]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第一局
2016/02/27 DOTA
python中Genarator函数用法分析
2015/04/08 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
Python unittest单元测试框架总结
2018/09/08 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
Python如何实现FTP功能
2020/05/28 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
python中time tzset()函数实例用法
2021/02/18 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
新年爱情寄语
2014/04/08 职场文书
股指期货心得体会
2014/09/10 职场文书
保证书格式
2015/01/16 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
Python 中 Shutil 模块详情
2021/11/11 Python