Commit 8fb03961f50051695983f8cb415d6009b9d6b643
1 parent
fedd9cae
fix: ensure permissionMode exists close #409
Showing
3 changed files
with
18 additions
and
16 deletions
src/settings/projectSetting.ts
... | ... | @@ -20,7 +20,7 @@ const setting: ProjectConfig = { |
20 | 20 | settingButtonPosition: SettingButtonPositionEnum.AUTO, |
21 | 21 | |
22 | 22 | // Permission mode |
23 | - permissionMode: PermissionModeEnum.ROLE, | |
23 | + permissionMode: PermissionModeEnum.BACK, | |
24 | 24 | |
25 | 25 | // Permission-related cache is stored in sessionStorage or localStorage |
26 | 26 | permissionCacheType: CacheTypeEnum.LOCAL, | ... | ... |
src/store/modules/permission.ts
1 | 1 | import type { AppRouteRecordRaw, Menu } from '/@/router/types'; |
2 | -import store from '/@/store/index'; | |
3 | -import { hotModuleUnregisterModule } from '/@/utils/helper/vuexHelper'; | |
4 | 2 | |
3 | +import store from '/@/store'; | |
4 | +import { toRaw } from 'vue'; | |
5 | 5 | import { VuexModule, Mutation, Module, getModule, Action } from 'vuex-module-decorators'; |
6 | 6 | |
7 | +import { hotModuleUnregisterModule } from '/@/utils/helper/vuexHelper'; | |
8 | + | |
7 | 9 | import { PermissionModeEnum } from '/@/enums/appEnum'; |
8 | 10 | |
9 | 11 | import { appStore } from '/@/store/modules/app'; |
10 | 12 | import { userStore } from '/@/store/modules/user'; |
13 | +import projectSetting from '/@/settings/projectSetting'; | |
11 | 14 | |
12 | 15 | import { asyncRoutes } from '/@/router/routes'; |
16 | +import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; | |
17 | +import { transformObjToRoute, flatMultiLevelRoutes } from '/@/router/helper/routeHelper'; | |
18 | +import { transformRouteToMenu } from '/@/router/helper/menuHelper'; | |
19 | + | |
13 | 20 | import { filter } from '/@/utils/helper/treeHelper'; |
14 | -import { toRaw } from 'vue'; | |
21 | + | |
15 | 22 | import { getMenuListById } from '/@/api/sys/menu'; |
16 | 23 | import { getPermCodeByUserId } from '/@/api/sys/user'; |
17 | 24 | |
18 | -import { transformObjToRoute, flatMultiLevelRoutes } from '/@/router/helper/routeHelper'; | |
19 | -import { transformRouteToMenu } from '/@/router/helper/menuHelper'; | |
20 | - | |
21 | 25 | import { useMessage } from '/@/hooks/web/useMessage'; |
22 | 26 | import { useI18n } from '/@/hooks/web/useI18n'; |
23 | -import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; | |
24 | 27 | |
25 | -const { createMessage } = useMessage(); | |
26 | 28 | const NAME = 'app-permission'; |
27 | 29 | hotModuleUnregisterModule(NAME); |
28 | 30 | @Module({ dynamic: true, namespaced: true, store, name: NAME }) |
... | ... | @@ -94,13 +96,11 @@ class Permission extends VuexModule { |
94 | 96 | const { t } = useI18n(); |
95 | 97 | let routes: AppRouteRecordRaw[] = []; |
96 | 98 | const roleList = toRaw(userStore.getRoleListState); |
97 | - | |
98 | - const { permissionMode = PermissionModeEnum.ROLE } = appStore.getProjectConfig; | |
99 | - | |
99 | + const { permissionMode = projectSetting.permissionMode } = appStore.getProjectConfig; | |
100 | 100 | // role permissions |
101 | 101 | if (permissionMode === PermissionModeEnum.ROLE) { |
102 | - const routeFilter = (route) => { | |
103 | - const { meta } = route as AppRouteRecordRaw; | |
102 | + const routeFilter = (route: AppRouteRecordRaw) => { | |
103 | + const { meta } = route; | |
104 | 104 | const { roles } = meta || {}; |
105 | 105 | if (!roles) return true; |
106 | 106 | return roleList.some((role) => roles.includes(role)); |
... | ... | @@ -111,6 +111,8 @@ class Permission extends VuexModule { |
111 | 111 | routes = flatMultiLevelRoutes(routes); |
112 | 112 | // If you are sure that you do not need to do background dynamic permissions, please comment the entire judgment below |
113 | 113 | } else if (permissionMode === PermissionModeEnum.BACK) { |
114 | + const { createMessage } = useMessage(); | |
115 | + | |
114 | 116 | createMessage.loading({ |
115 | 117 | content: t('sys.app.menuLoading'), |
116 | 118 | duration: 1, | ... | ... |
src/utils/helper/vuexHelper.ts
1 | 1 | import store from '/@/store'; |
2 | 2 | |
3 | 3 | export function hotModuleUnregisterModule(name: string) { |
4 | - if (!name) return; | |
5 | - if ((store.state as any)[name]) { | |
4 | + if (!name || !import.meta.hot) return; | |
5 | + if ((store.state as Recordable)[name]) { | |
6 | 6 | store.unregisterModule(name); |
7 | 7 | } |
8 | 8 | } | ... | ... |