基于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 相关文章推荐
firefox火狐浏览器与与ie兼容的2个问题总结
Jul 20 Javascript
Jquery实现自定义弹窗示例
Mar 12 Javascript
wap图片滚动特效无css3元素纯js脚本编写
Aug 22 Javascript
node.js中的fs.readdirSync方法使用说明
Dec 17 Javascript
JQuery选择器绑定事件及修改内容的方法
Jan 23 Javascript
jQuery xml字符串的解析、读取及查找方法
Mar 01 Javascript
实例讲解JavaScript中instanceof运算符的用法
Jun 08 Javascript
详解Bootstrap各式各样的按钮(推荐)
Dec 13 Javascript
Angular之指令Directive用法详解
Mar 01 Javascript
JS实现汉字与Unicode码相互转换的方法详解
Apr 28 Javascript
vue写一个组件
Apr 09 Javascript
JavaScript两种计时器的实例讲解
Jan 31 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中$_SERVER的详细参数与说明
2008/07/29 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
DOM 中的事件处理介绍
2012/01/18 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
vue2.0之多页面的开发的示例
2018/01/30 Javascript
vue项目实现github在线预览功能
2018/06/20 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
Python编写登陆接口的方法
2017/07/10 Python
用python实现刷点击率的示例代码
2019/02/21 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
计算机专业自我鉴定
2013/10/15 职场文书
美工的岗位职责
2013/11/14 职场文书
英语演讲稿范文
2014/01/03 职场文书
史学专业毕业生求职信
2014/05/09 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
城管年度个人总结
2015/02/28 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
预备党员入党感言
2015/08/01 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js