authDirective.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. if (!buttons.includes(binding.value)) el.parentNode.removeChild(el)
  18. },
  19. });
  20. // 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]")
  21. app.directive('auths', {
  22. mounted(el, binding) {
  23. const buttons = <string[]>router.currentRoute.value.meta.buttons
  24. if (buttons.includes(allPermissions)) return
  25. let flag = false;
  26. buttons.map((val: string) => {
  27. binding.value.map((v: string) => {
  28. if (val === v) flag = true;
  29. });
  30. });
  31. if (!flag) el.parentNode.removeChild(el);
  32. },
  33. });
  34. // 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]")
  35. app.directive('auth-all', {
  36. mounted(el, binding) {
  37. const buttons = <string[]>router.currentRoute.value.meta.buttons
  38. if (buttons.includes(allPermissions)) return
  39. !smallInBig(buttons, binding.value) && el.parentNode.removeChild(el)
  40. },
  41. });
  42. }