index.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { Directive, DirectiveBinding } from 'vue';
  2. import { useUserStore } from '@/store/modules/user';
  3. /**
  4. * 操作权限处理
  5. */
  6. export const hasPermi: Directive = {
  7. mounted(el: HTMLElement, binding: DirectiveBinding) {
  8. const { permissions } = useUserStore();
  9. // 「其他角色」按钮权限校验
  10. const { value } = binding;
  11. if (value && value instanceof Array && value.length > 0) {
  12. const hasPermission = permissions.some((permi: string) => {
  13. return permi === '*:*:*' || value.includes(permi);
  14. });
  15. if (!hasPermission) {
  16. el.parentNode && el.parentNode.removeChild(el);
  17. return false;
  18. }
  19. } else {
  20. throw new Error("check perms! Like v-has-permi=\"['system:user:add','system:user:edit']\"");
  21. }
  22. }
  23. };
  24. /**
  25. * 角色权限处理
  26. */
  27. export const hasRoles: Directive = {
  28. mounted(el: HTMLElement, binding: DirectiveBinding) {
  29. const { value } = binding;
  30. const { roles } = useUserStore();
  31. if (value && value instanceof Array && value.length > 0) {
  32. const hasRole = roles.some((role: string) => {
  33. return role === 'superadmin' || role === 'admin' || value.includes(role);
  34. });
  35. if (!hasRole) {
  36. el.parentNode && el.parentNode.removeChild(el);
  37. return false;
  38. }
  39. } else {
  40. throw new Error("check roles! Like v-has-roles=\"['admin','test']\"");
  41. }
  42. }
  43. };