diff --git a/apps/web/src/lib/config/global-config/feature-schema-manager.ts b/apps/web/src/lib/config/global-config/feature-schema-manager.ts index 134521d85f..a40bbb27a6 100644 --- a/apps/web/src/lib/config/global-config/feature-schema-manager.ts +++ b/apps/web/src/lib/config/global-config/feature-schema-manager.ts @@ -31,7 +31,7 @@ export class FeatureSchemaManager { if (configurator) { const currentVersion = this.config[feature]?.VERSION || 'V1'; configurator.initialize(currentVersion); - const menuConfig = configurator.getMenu(); + const menuConfig = configurator.getMenu(this.config); if (configurator.uiAffect) { configurator.uiAffect.forEach((uiAffect) => { diff --git a/apps/web/src/lib/config/global-config/types/type.ts b/apps/web/src/lib/config/global-config/types/type.ts index f00dfecfe1..625703d03c 100644 --- a/apps/web/src/lib/config/global-config/types/type.ts +++ b/apps/web/src/lib/config/global-config/types/type.ts @@ -32,7 +32,7 @@ export type ApiClientsSchemaType = { export interface FeatureConfiguratorType { getRoutes: (isAdmin?: boolean) => RouteConfig|null; - getMenu: (isAdmin?: boolean) => FeatureMenuConfig; + getMenu: (config?: GlobalServiceConfig) => FeatureMenuConfig; initialize: (version: FeatureVersion) => void; uiAffect: FeatureUiAffect[]; } diff --git a/apps/web/src/services/iam/components/UserGroupManagementTabUsers.vue b/apps/web/src/services/iam/components/UserGroupManagementTabUsers.vue index 90fa6ee97a..ef16a2e05c 100644 --- a/apps/web/src/services/iam/components/UserGroupManagementTabUsers.vue +++ b/apps/web/src/services/iam/components/UserGroupManagementTabUsers.vue @@ -14,10 +14,14 @@ import { import type { DataTableFieldType } from '@cloudforet/mirinae/types/data-display/tables/data-table/type'; import type { ListResponse } from '@/api-clients/_common/schema/api-verbs/list'; +import type { UserListParameters } from '@/api-clients/identity/user/schema/api-verbs/list'; +import type { UserModel } from '@/api-clients/identity/user/schema/model'; import type { WorkspaceUserListParameters } from '@/api-clients/identity/workspace-user/schema/api-verbs/list'; import type { WorkspaceUserModel } from '@/api-clients/identity/workspace-user/schema/model'; import { i18n } from '@/translations'; +import { useAppContextStore } from '@/store/app-context/app-context-store'; + import ErrorHandler from '@/common/composables/error/errorHandler'; import { useQueryTags } from '@/common/composables/query-tags'; @@ -36,6 +40,7 @@ interface Props { const props = defineProps(); +const appContextStore = useAppContextStore(); const userGroupPageStore = useUserGroupPageStore(); const userGroupPageState = userGroupPageStore.state; const userGroupPageGetters = userGroupPageStore.getters; @@ -70,6 +75,7 @@ const state = reactive({ userItemTotalCount: computed(() => userGroupPageState.users.totalCount), filteredUserList: [] as UserListItemType[], totalCount: 0, + isAdminMode: computed(() => appContextStore.getters.isAdminMode), }); const tableState = reactive({ @@ -139,8 +145,11 @@ const handleChange = async (options: any = {}) => { /* API */ const fetchWorkspaceUserList = async (params: WorkspaceUserListParameters) => { + const fetcher = state.isAdminMode + ? SpaceConnector.clientV2.identity.user.list> + : SpaceConnector.clientV2.identity.workspaceUser.list>; try { - const { results, total_count } = await SpaceConnector.clientV2.identity.workspaceUser.list>(params); + const { results, total_count } = await fetcher(params); state.filteredUserList = results ?? []; userGroupPageState.users.list = results; state.totalCount = total_count ?? 0; diff --git a/apps/web/src/services/iam/configurator.ts b/apps/web/src/services/iam/configurator.ts index cfed2d412a..72d0f5bd24 100644 --- a/apps/web/src/services/iam/configurator.ts +++ b/apps/web/src/services/iam/configurator.ts @@ -1,6 +1,8 @@ import type { RouteConfig } from 'vue-router'; -import type { FeatureConfiguratorType, FeatureMenuConfig, FeatureUiAffect } from '@/lib/config/global-config/types/type'; +import type { + FeatureConfiguratorType, FeatureMenuConfig, FeatureUiAffect, GlobalServiceConfig, +} from '@/lib/config/global-config/types/type'; import type { Menu } from '@/lib/menu/config'; import { MENU_ID } from '@/lib/menu/config'; @@ -21,7 +23,8 @@ class IamConfigurator implements FeatureConfiguratorType { return isAdmin ? adminIamRoutes : iamRoutes; } - getMenu(): FeatureMenuConfig { + getMenu(config?: GlobalServiceConfig): FeatureMenuConfig { + const alertManagerVersion = config?.ALERT_MANAGER?.VERSION; const baseMenu: Menu = { id: MENU_ID.IAM, needPermissionByRole: true, @@ -29,23 +32,30 @@ class IamConfigurator implements FeatureConfiguratorType { order: 8, }; + const workspaceSubMenuList: Menu[] = [ + { id: MENU_ID.USER, needPermissionByRole: true }, + { id: MENU_ID.APP, needPermissionByRole: true }, + ]; + + const adminSubMenuList: Menu[] = [ + { id: MENU_ID.USER }, + { id: MENU_ID.APP }, + { id: MENU_ID.ROLE }, + ]; + + if (alertManagerVersion === 'V2') { + workspaceSubMenuList.splice(1, 0, { id: MENU_ID.USER_GROUP, needPermissionByRole: true }); + adminSubMenuList.splice(1, 0, { id: MENU_ID.USER_GROUP }); + } + return { menu: { ...baseMenu, - subMenuList: [ - { id: MENU_ID.USER, needPermissionByRole: true }, - { id: MENU_ID.USER_GROUP, needPermissionByRole: true }, - { id: MENU_ID.APP, needPermissionByRole: true }, - ], + subMenuList: workspaceSubMenuList, }, adminMenu: { ...baseMenu, - subMenuList: [ - { id: MENU_ID.USER }, - { id: MENU_ID.USER_GROUP }, - { id: MENU_ID.APP }, - { id: MENU_ID.ROLE }, - ], + subMenuList: adminSubMenuList, }, version: this.version, }; diff --git a/apps/web/src/services/ops-flow/configurator.ts b/apps/web/src/services/ops-flow/configurator.ts index 71a85af069..2f1d46c7b2 100644 --- a/apps/web/src/services/ops-flow/configurator.ts +++ b/apps/web/src/services/ops-flow/configurator.ts @@ -35,7 +35,6 @@ class OpsFlowConfigurator implements FeatureConfiguratorType { subMenuList: [ { id: MENU_ID.OPS_FLOW_LANDING, needPermissionByRole: true }, { id: MENU_ID.TASK_BOARD, needPermissionByRole: true }, - { id: MENU_ID.APP, needPermissionByRole: true }, ], }, adminMenu: {