基于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 1.0.4 - New Wave Javascript(js源文件)
Jan 15 Javascript
疯掉了,尽然有js写的操作系统
Apr 23 Javascript
jquery判断单选按钮radio是否选中的方法
May 05 Javascript
全面了解JavaScript的数据类型转换
Jul 01 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
Easyui的组合框的取值与赋值
Oct 28 Javascript
JS 实现可停顿的垂直滚动实例代码
Nov 23 Javascript
javascript 闭包详解及简单实例应用
Dec 31 Javascript
vue.js或js实现中文A-Z排序的方法
Mar 08 Javascript
在vue中使用express-mock搭建mock服务的方法
Nov 07 Javascript
微信小程序-form表单提交代码实例
Apr 29 Javascript
JavaScript RegExp 对象用法详解
Sep 24 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
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
js验证表单第二部分
2006/11/25 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
Python中线程编程之threading模块的使用详解
2015/06/23 Python
Python3.6正式版新特性预览
2016/12/15 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
python url 参数修改方法
2018/12/26 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
python二维图制作的实例代码
2020/12/03 Python
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
前台领班岗位职责
2013/12/04 职场文书
英语道歉信范文
2014/01/09 职场文书
求职简历的自我评价
2014/01/31 职场文书
广告创意求职信
2014/03/17 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
学校师德师风整改方案
2014/10/28 职场文书
班主任工作实习计划
2015/01/16 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
Python实现打乒乓小游戏
2021/09/25 Python