authDirective.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import type { App } from 'vue';
  2. import { useUserInfo } from '/@/stores/userInfo';
  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. // 单个权限验证(v-auth="xxx")
  12. app.directive('auth', {
  13. mounted(el, binding) {
  14. const stores = useUserInfo();
  15. if(!binding.value||!stores.userInfos?.permissions){
  16. return;
  17. }
  18. if (!stores.userInfos.permissions.some((v: string) => v === binding.value)) el.parentNode.removeChild(el);
  19. },
  20. });
  21. // 多个权限验证,满足一个则显示(v-auths="[xxx,xxx]")
  22. app.directive('auths', {
  23. mounted(el, binding) {
  24. if(!binding.value){
  25. return;
  26. }
  27. let flag = false;
  28. const stores = useUserInfo();
  29. stores.userInfos.permissions.map((val: string) => {
  30. binding.value.map((v: string) => {
  31. if (val === v) {
  32. flag = true;
  33. return;
  34. }
  35. });
  36. });
  37. console.log("v-auths")
  38. if (!flag) el.parentNode.removeChild(el);
  39. },
  40. });
  41. // 多个权限验证,全部满足则显示(v-auth-all="[xxx,xxx]")
  42. app.directive('auth-all', {
  43. mounted(el, binding) {
  44. if(!binding.value){
  45. return;
  46. }
  47. const stores = useUserInfo();
  48. const flag = judementSameArr(binding.value, stores.userInfos.permissions);
  49. if (!flag) el.parentNode.removeChild(el);
  50. },
  51. });
  52. }