<template>
<div>
<h3>自定义指令实现按钮级权限控制</h3>
<button class="btn" v-permission="'goods:create'">创建</button>
<button class="btn" v-permission="'goods:edit'">编辑</button>
<button class="btn" v-permission="'goods:delete'">删除</button>
</div>
</template>
store/index.ts
state(){
return{
user: {
perms:["user:goods:create",
// 'user:goods:edit',
"user:goods:delete",]
},
},
main.ts中定义自定义指令
app.directive("permission",{
mounted(el, binding) {//自定义钩子函数
localStorage.setItem("userId", "user");
// mock 后台返回的权限列表
// 使用自定义指令,实现按钮级权限控制 简写方式
const userId = localStorage.getItem("userId") as string;
let val = binding.value;//获取v-permission传递过来的值
console.log(store.state)
const permissionList = store.state.user.perms || [];//[]作用是防止空指针异常,获取用户有哪些权限
console.log(permissionList)
if(-1===permissionList.indexOf(`${userId}:${val}`)){//判断有没权限
//没有权限
el.remove?.()
}
}
})