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