| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /**
- * 自定义权限指令
- * 用法: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)
- }
- }
|