vue按钮级别的权限控制

902 阅读1分钟

vue项目中,除了有路由权限,也有页面内的按钮级别权限,,比如只有管理员才有删除数据的功能,才会显示删除按钮。

获取权限数据并保存在vuex中

首先登录的时候,后端接口会把权限的数据返回给我们,我们把它存在vuex中,假如后端的返回结果如下:

[{    authority: "afterCar:materialsBill:view"},{    authority: "basic:driver:view"},{    authority: "admin:logs"},{    authority: "contracting:fixedCost:view"}]

我们将他存在vuex中,用的时候从vuex中获取。

创建permision.js

我们在src下创建permission文件夹。

@src/permission/inedx.js

src/permission/inedx.js

import store from '@/store'

export function hasPermission(perms) {
  let hasPermission = true 

  const un = store.getters.userName
  if (un === 'admin') {   //如果是超级管理员有一切权限
    return true
  }

  const permissions = store.getters && store.getters.perms   //就是上面获取的权限的数据

  if (permissions.length >= 0) {
    hasPermission = false
  }

  for (let i = 0, len = permissions.length; i < len; i++) {
    const authority = permissions[i].authority
    if (authority === perms) {
      hasPermission = true
      break
    }
  }
  return hasPermission
}

在页面中使用

  <el-button
        v-if="hasPerms('basic:customer:examine')"
        type="text"
        class
    >审核</el-button>
    
     <el-button
        v-if="hasPerms('basic:customer:edit')"
        type="text"
        class
    >编辑</el-button>
    
    
    //  其中‘basic:customer:examine’,basic:customer:edit 是前后端协议规定的权限标识,只有完全匹配时才会显示按钮
    
    
  import { hasPermission } from '@/permission/index.js'
  methods:{
     hasPerms: function(perms) {
      return hasPermission(perms)
    },
  }