/** * 自定义权限指令 * 用法:v-permission="'system:user:add'" * 如果用户有该权限,则显示元素;否则隐藏元素 * 特殊情况:如果用户权限列表包含'*:*:*',则显示所有元素 */ export const permission = { // 在绑定元素的父组件挂载时调用 mounted(el, binding) { const { value } = binding // 获取用户按钮权限列表 const buttonList = uni.getStorageSync('buttonList') || [] // 检查权限 const hasPermission = checkPermission(value, buttonList) if (!hasPermission) { // 如果没有权限,则移除元素 el.parentNode && el.parentNode.removeChild(el) } } } /** * 检查用户是否拥有某项权限 * @param {String} permission 要检查的权限标识 * @param {Array} buttonList 用户拥有的按钮权限列表 * @returns {Boolean} 是否拥有权限 */ export function checkPermission(permission, buttonList) { // 如果未设置权限或按钮权限列表为空,则认为没有权限 if (!permission || !buttonList || buttonList.length === 0) { return false } // 特殊情况:如果权限列表中包含'*:*:*',则拥有所有权限 if (buttonList.includes('*:*:*')) { return true } // 判断是否拥有某项权限 return buttonList.includes(permission) } // 在main.js中可以全局注册这个指令 export default { install(app) { app.directive('permission', permission) } }