/** * Global authority directive * Used for fine-grained control of component permissions * @Example v-auth="name" */ import type { App, Directive, DirectiveBinding } from 'vue'; import { authorizationService } from '/nerv-lib/saas/store/modules/authorization-service'; function isAuth(el: Element, binding: any) { const { checkPermission, checkAllPermission, checkPermissionRouter } = authorizationService(); const { value, modifiers } = binding; if (!value) return; //操作按钮 if (modifiers.op) { if (!checkPermission(value)) { el.parentNode?.removeChild(el); } } // 全部 if (modifiers.all) { if (!checkAllPermission(value)) { el.parentNode?.removeChild(el); } } // 路由 if (modifiers.route) { if (!checkPermissionRouter(value)) { el.parentNode?.removeChild(el); } } } const mounted = (el: Element, binding: DirectiveBinding) => { isAuth(el, binding); }; const authDirective: Directive = { mounted, }; export function setupPermissionDirective(app: App) { app.directive('auth', authDirective); } export default authDirective;