基于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 相关文章推荐
创建一个复制UBB软件信息的链接或按钮的js代码
Jan 06 Javascript
jQuery load方法用法集锦
Dec 06 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
Jan 30 Javascript
js单例模式详解实例
Nov 21 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
Mar 09 Javascript
如何检测JavaScript的各种类型
Jul 30 Javascript
js实现上传文件添加和删除文件选择框
Oct 24 Javascript
利用node.js实现反向代理的方法详解
Jul 24 Javascript
AngularJS 仿微信图片手势缩放的实例
Sep 28 Javascript
Vue集成Iframe页面的方法示例
Dec 12 Javascript
Vue一次性简洁明了引入所有公共组件的方法
Nov 28 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
Nov 30 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
自己动手做一个SQL解释器
2006/10/09 PHP
用PHP和ACCESS写聊天室(七)
2006/10/09 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
javascript 一些用法小结
2009/09/11 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
详解Python3中字符串中的数字提取方法
2017/01/14 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
人事部专员岗位职责
2014/03/04 职场文书
土地租赁意向书
2014/07/30 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
2015年团支书工作总结
2015/04/03 职场文书
Go web入门Go pongo2模板引擎
2022/05/20 Golang