hasRole.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. /**
  2. * 角色权限处理指令
  3. * 该指令用于根据用户的角色控制元素的显示与隐藏
  4. */
  5. import store from '@/store' // 导入 Vuex store,以获取用户的角色信息
  6. export default {
  7. // 当指令被绑定到元素上时调用
  8. inserted(el, binding, vnode) {
  9. const { value } = binding // 获取指令传入的值
  10. const super_admin = "admin"; // 定义超级管理员角色
  11. const roles = store.getters && store.getters.roles // 从 Vuex store 获取当前用户的角色列表
  12. // 检查指令值是否存在,并且是一个非空数组
  13. if (value && value instanceof Array && value.length > 0) {
  14. const roleFlag = value // 将传入的角色值赋给 roleFlag
  15. // 检查用户是否具有所需的角色
  16. const hasRole = roles.some(role => {
  17. // 如果用户是超级管理员,或者用户的角色列表中包含所需的角色
  18. return super_admin === role || roleFlag.includes(role)
  19. })
  20. // 如果用户没有所需的角色
  21. if (!hasRole) {
  22. // 从 DOM 中移除该元素
  23. el.parentNode && el.parentNode.removeChild(el)
  24. }
  25. } else {
  26. // 如果没有设置角色权限标签值,抛出错误
  27. throw new Error(`请设置角色权限标签值`)
  28. }
  29. }
  30. }