mzjh 项目鉴权

获取后端的接口后

将后端的数据转成数组 并报错保存

业务逻辑

复制代码
function getPoints(menus) {
  let Points = []
  for (let menu of menus) {
    if (menu.useType === 2) {
      if (menu.grantName !== undefined && menu.grantName !== null) {
        Points.push(menu.grantName)
      }
    }
    if (menu.childMenuList && menu.childMenuList.length > 0) {
      Points = Points.concat(getPoints(menu.childMenuList))
    }
  }
  return Points
}

src下 新建directives 文件夹

permission.js

bash 复制代码
import store from '@/store'

function checkPermission(el, binding) {
  // 获取绑定的值,此处为权限
  const { value } = binding
  // 获取所有的功能指令
  const points = store.getters.getPonits // 这里是获取上面的数组
  // 当传入的指令集为数组时
  if (value && value instanceof Array) {
    // 匹配对应的指令
    const hasPermission = points.some(point => {
      return value.includes(point)
    })
    // 如果无法匹配,则表示当前用户无该指令,那么删除对应的功能按钮
    if (!hasPermission) {
      el.parentNode && el.parentNode.removeChild(el)
    }
  } else {
    // eslint-disabled-next-line
    throw new Error('v-permission value is ["admin","editor"]')
  }
}

export default {
  // 在绑定元素的父组件被挂载后调用
  mounted(el, binding) {
    checkPermission(el, binding)
  },
  // 在包含组件的 VNode 及其子组件的 VNode 更新后调用
  update(el, binding) {
    checkPermission(el, binding)
  }
}

index.js

bash 复制代码
import print from 'vue3-print-nb'
import permission from './permission'
export default app => {
  app.use(print)
  app.directive('permission', permission)
}

main.js

bash 复制代码
import installDirective from '@/directives'
installDirective(app)

使用

bash 复制代码
<el-form-item v-permission="['ROLE_MENU_ADD']">
 	<el-button @click="addBtn" type="primary">新增菜单</el-button>
</el-form-item>
相关推荐
ℋᙚᵐⁱᒻᵉ鲸落24 分钟前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙2 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
এ慕ོ冬℘゜3 小时前
navigator 导航对象 BOM制作方法
javascript
kyriewen5 小时前
面试官让我用 AI 重构一个 8 年陈的 React 组件——他说他不看代码,只看我会不会拆
前端·javascript·面试
Jacky19997 小时前
Electron + Vue 3 桌面打字游戏实战:从 VSCode 扩展到独立应用的架构改造
javascript
用户50093768390397 小时前
热敏小票 Web 打印:我在 58/80mm 上折腾的两周
前端·vue.js
柚yuzumi8 小时前
别再猜 this:先看它属于谁,再看它指向谁
前端·javascript
汉堡大王95278 小时前
面试必考:手写代码 new 做了什么?从原理到实现全解析
前端·javascript·面试
BillKu8 小时前
TypeScript中,字符串字面量联合类型(Union Type)、enum的用法说明
前端·javascript·typescript
顶级自由人11 小时前
本地正常、线上正常,为什么一个 Hook 仍会报错?
前端·javascript·程序员