authDirective.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import type { App } from 'vue';
  2. import { smallInBig } from '/@/utils/arrayOperation';
  3. import router from '../router';
  4. /**
  5. * 用户权限指令
  6. * @directive 单个权限验证(v-auth="xxx")
  7. * @directive 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]")
  8. * @directive 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]")
  9. */
  10. export function authDirective(app: App) {
  11. const allPermissions = "*/*/*"
  12. // 单个权限验证(v-auth="xxx")
  13. app.directive('auth', {
  14. mounted(el, binding) {
  15. const buttons = <string[]>router.currentRoute.value.meta.buttons
  16. if (buttons.includes(allPermissions)) return
  17. // 不显示该dom
  18. // if (!buttons.includes(binding.value)) el.parentNode.removeChild(el)
  19. // 设置为disabled
  20. if (!buttons.includes(binding.value)) el.classList.add('v-disabled')
  21. },
  22. });
  23. // 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]")
  24. app.directive('auths', {
  25. mounted(el, binding) {
  26. const buttons = <string[]>router.currentRoute.value.meta.buttons
  27. if (buttons.includes(allPermissions)) return
  28. let flag = false;
  29. buttons.map((val: string) => {
  30. binding.value.map((v: string) => {
  31. if (val === v) flag = true;
  32. });
  33. });
  34. // if (!flag) el.parentNode.removeChild(el);
  35. if (!flag) el.classList.add('v-disabled')
  36. },
  37. });
  38. // 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]")
  39. app.directive('auth-all', {
  40. mounted(el, binding) {
  41. const buttons = <string[]>router.currentRoute.value.meta.buttons
  42. if (buttons.includes(allPermissions)) return
  43. // !smallInBig(buttons, binding.value) && el.parentNode.removeChild(el)
  44. !smallInBig(buttons, binding.value) && el.classList.add('v-disabled')
  45. },
  46. });
  47. }