authDirective.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import type { App } from 'vue';
  2. import { store } from '/@/store/index.ts';
  3. import { judementSameArr } from '/@/utils/arrayOperation';
  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. if (store.state.userInfos.permissions.includes(allPermissions)) return
  16. if (!store.state.userInfos.permissions.some((v: string) => v === binding.value)) el.parentNode.removeChild(el);
  17. },
  18. });
  19. // 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]")
  20. app.directive('auths', {
  21. mounted(el, binding) {
  22. if (store.state.userInfos.permissions.includes(allPermissions)) return
  23. let flag = false;
  24. store.state.userInfos.permissions.map((val: string) => {
  25. binding.value.map((v: string) => {
  26. if (val === v) flag = true;
  27. });
  28. });
  29. if (!flag) el.parentNode.removeChild(el);
  30. },
  31. });
  32. // 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]")
  33. app.directive('auth-all', {
  34. mounted(el, binding) {
  35. if (store.state.userInfos.permissions.includes(allPermissions)) return
  36. const flag = judementSameArr(binding.value, store.state.userInfos.permissions);
  37. if (!flag) el.parentNode.removeChild(el);
  38. },
  39. });
  40. }