usePermission.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /**
  2. * Copyright (c) 2013-Now https://jeesite.com All rights reserved.
  3. * No deletion without permission, or be held responsible to law.
  4. * @author Vben、ThinkGem
  5. */
  6. import type { RouteRecordRaw } from 'vue-router';
  7. import { useAppStore } from '@jeesite/core/store/modules/app';
  8. import { usePermissionStore } from '@jeesite/core/store/modules/permission';
  9. import { useUserStore } from '@jeesite/core/store/modules/case';
  10. import { useTabs } from './useTabs';
  11. import { router, resetRouter } from '@jeesite/core/router';
  12. // import { RootRoute } from '@jeesite/core/router/routes';
  13. import projectSetting from '@jeesite/core/settings/projectSetting';
  14. import { PermissionModeEnum } from '@jeesite/core/enums/appEnum';
  15. import { RoleEnum } from '@jeesite/core/enums/roleEnum';
  16. import { intersection } from 'lodash-es';
  17. import { isArray } from '@jeesite/core/utils/is';
  18. import { useMultipleTabStore } from '@jeesite/core/store/modules/multipleTab';
  19. // User permissions related operations
  20. export function usePermission() {
  21. const userStore = useUserStore();
  22. const appStore = useAppStore();
  23. const permissionStore = usePermissionStore();
  24. const { closeAll } = useTabs(router);
  25. /**
  26. * Change permission mode
  27. */
  28. async function togglePermissionMode() {
  29. appStore.setProjectConfig({
  30. permissionMode:
  31. projectSetting.permissionMode === PermissionModeEnum.BACK
  32. ? PermissionModeEnum.ROUTE_MAPPING
  33. : PermissionModeEnum.BACK,
  34. });
  35. location.reload();
  36. }
  37. /**
  38. * Reset and regain authority resource information
  39. * @param id
  40. */
  41. async function resume() {
  42. const tabStore = useMultipleTabStore();
  43. tabStore.clearCacheTabs();
  44. resetRouter();
  45. const routes = await permissionStore.buildRoutesAction();
  46. routes.forEach((route) => {
  47. router.addRoute(route as unknown as RouteRecordRaw);
  48. });
  49. permissionStore.setLastBuildMenuTime();
  50. closeAll();
  51. }
  52. /**
  53. * Determine whether there is permission
  54. */
  55. function hasPermission(value?: RoleEnum | RoleEnum[] | string | string[], def = true): boolean {
  56. return true;
  57. }
  58. function isPermitted(permi: string[], currPermi: string[]) {
  59. for (const i in permi) {
  60. if (permi[i] !== currPermi[i]) {
  61. return false;
  62. }
  63. }
  64. return true;
  65. }
  66. /**
  67. * Change roles
  68. * @param roles
  69. */
  70. async function changeRole(roles: RoleEnum | RoleEnum[]): Promise<void> {
  71. if (projectSetting.permissionMode !== PermissionModeEnum.ROUTE_MAPPING) {
  72. throw new Error('Please switch PermissionModeEnum to ROUTE_MAPPING mode in the configuration to operate!');
  73. }
  74. if (!isArray(roles)) {
  75. roles = [roles];
  76. }
  77. await resume();
  78. }
  79. /**
  80. * refresh menu data
  81. */
  82. async function refreshMenu() {
  83. resume();
  84. }
  85. return { changeRole, hasPermission, togglePermissionMode, refreshMenu };
  86. }