欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于Vue自定义指令实现按钮级权限控制思路详解

程序员文章站 2022-09-03 10:26:21
思路: 登录:当用户填写完账号和密码后向服务端验证是否正确,验证通过之后,服务端会返回一个token,拿到token之后(我会将这个token存贮到session...

思路:

  • 登录:当用户填写完账号和密码后向服务端验证是否正确,验证通过之后,服务端会返回一个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自定义指令实现按钮级权限控制,希望对大家有所帮助