permission.ts 840 B

123456789101112131415161718192021222324252627282930
  1. import { appStore } from '/@/store/modules/app';
  2. import type { App } from 'vue';
  3. import { usePermission } from '/@/hooks/web/usePermission';
  4. import { PermissionModeEnum } from '/@/enums/appEnum';
  5. const { hasPermission } = usePermission();
  6. function isAuth(el: Element, binding: any) {
  7. const value = binding.value;
  8. if (!value) return;
  9. if (!hasPermission(value)) {
  10. if (el.parentNode) {
  11. el.parentNode.removeChild(el);
  12. }
  13. }
  14. }
  15. function isBackMode() {
  16. return appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK;
  17. }
  18. export function setupPermissionDirective(app: App) {
  19. app.directive('auth', {
  20. mounted(el: Element, binding) {
  21. if (isBackMode()) return;
  22. isAuth(el, binding);
  23. },
  24. updated(el: Element, binding) {
  25. if (!isBackMode()) return;
  26. isAuth(el, binding);
  27. },
  28. });
  29. }