vue实现按钮功能级权限控制

合适的位置接口获取权限信息,比如登录接口

####这里简化了代码######
function _queryPermissionList(to, next) {
return new Promise((resolve, reject) => {
queryPermissionList().then(res => {
let permissionsList = res.permissionList;
store.commit("user/SET_PERMISSION", permissionsList ? permissionsList : []);
resolve()
}).catch(err => {
reject(err)
})
})
}

// 定义一些和权限有关的 Vue指令

// 必须包含列出的所有权限,元素才显示
export const hasPermission = {
install(Vue) {
Vue.directive('hasPermission', {
bind(el, binding, vnode) {
const permissions = vnode.context.$store.state.user.permissions
const value = binding.value
let flag = true
for (const v of value) {
if (!permissions.includes(v)) {
flag = false
}
}
if (!flag) {
if (!el.parentNode) {
el.style.display = 'none'
} else {
el.parentNode.removeChild(el)
}
}
}
})
}
}

// 当不包含列出的权限时,渲染该元素
export const hasNoPermission = {
install(Vue) {
Vue.directive('hasNoPermission', {
bind(el, binding, vnode) {
const permissions = vnode.context.$store.state.user.permissions

const value = binding.value
let flag = true
for (const v of value) {
if (permissions.includes(v)) {
flag = false
}
}
if (!flag) {
if (!el.parentNode) {
el.style.display = 'none'
} else {
el.parentNode.removeChild(el)
}
}
}
})
}
}

// 只要包含列出的任意一个权限,元素就会显示
export const hasAnyPermission = {
install(Vue) {
Vue.directive('hasAnyPermission', {
bind(el, binding, vnode) {
const permissions = vnode.context.$store.state.user.permissions
const value = binding.value
let flag = false
for (const v of value) {
if (permissions.includes(v)) {
flag = true
}
}
if (!flag) {
if (!el.parentNode) {
el.style.display = 'none'
} else {
el.parentNode.removeChild(el)
}
}
}
})
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微笑点燃希望

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值