From 4cf5b8770648f8bf69f5e56df3d343fdc21569a8 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Wed, 15 Feb 2023 10:15:16 +0100 Subject: [PATCH 1/4] Make permissionManager available for routes and navItems of apps --- packages/web-app-admin-settings/src/index.ts | 17 ++--- .../tests/unit/index.spec.ts | 70 +++++++++++-------- .../src/container/application/classic.ts | 22 ++++-- .../src/container/application/index.ts | 9 ++- .../web-runtime/src/container/bootstrap.ts | 8 ++- packages/web-runtime/src/container/types.ts | 4 +- packages/web-runtime/src/index.ts | 3 +- 7 files changed, 82 insertions(+), 51 deletions(-) diff --git a/packages/web-app-admin-settings/src/index.ts b/packages/web-app-admin-settings/src/index.ts index 320661a192c..46ba7d85e77 100644 --- a/packages/web-app-admin-settings/src/index.ts +++ b/packages/web-app-admin-settings/src/index.ts @@ -15,14 +15,11 @@ const appInfo = { isFileEditor: false } -// FIXME: a better way to access this is needed -const permissionManager = () => (window as any).__$permissionManager - -const routes = [ +const routes = (permissionManager) => [ { path: '/', redirect: () => { - if (permissionManager().hasSystemManagement()) { + if (permissionManager.hasSystemManagement()) { return { name: 'admin-settings-general' } } return { name: 'admin-settings-spaces' } @@ -66,7 +63,7 @@ const routes = [ } ] -const navItems = [ +const navItems = (permissionManager) => [ { name: $gettext('General'), icon: 'settings-4', @@ -74,7 +71,7 @@ const navItems = [ path: `/${appInfo.id}/general?` }, enabled: () => { - return permissionManager().hasSystemManagement() + return permissionManager.hasSystemManagement() } }, { @@ -84,7 +81,7 @@ const navItems = [ path: `/${appInfo.id}/users?` }, enabled: () => { - return permissionManager().hasUserManagement() + return permissionManager.hasUserManagement() } }, { @@ -94,7 +91,7 @@ const navItems = [ path: `/${appInfo.id}/groups?` }, enabled: () => { - return permissionManager().hasUserManagement() + return permissionManager.hasUserManagement() } }, { @@ -104,7 +101,7 @@ const navItems = [ path: `/${appInfo.id}/spaces?` }, enabled: () => { - return permissionManager().hasSpaceManagement() + return permissionManager.hasSpaceManagement() } } ] diff --git a/packages/web-app-admin-settings/tests/unit/index.spec.ts b/packages/web-app-admin-settings/tests/unit/index.spec.ts index 3ad3c184b64..918973d8c1c 100644 --- a/packages/web-app-admin-settings/tests/unit/index.spec.ts +++ b/packages/web-app-admin-settings/tests/unit/index.spec.ts @@ -4,54 +4,68 @@ describe('admin settings index', () => { describe('navItems', () => { describe('general', () => { it.each([true, false])('should be enabled according to the permissions', (enabled) => { - ;(window as any).__$permissionManager = { - hasSystemManagement: () => enabled - } - expect(index.navItems.find((n) => n.name === 'General').enabled()).toBe(enabled) + const permissionManager = { hasSystemManagement: () => enabled } + expect( + index + .navItems(permissionManager) + .find((n) => n.name === 'General') + .enabled() + ).toBe(enabled) }) }) describe('user management', () => { it.each([true, false])('should be enabled according to the permissions', (enabled) => { - ;(window as any).__$permissionManager = { - hasUserManagement: () => enabled - } - expect(index.navItems.find((n) => n.name === 'Users').enabled()).toBe(enabled) + const permissionManager = { hasUserManagement: () => enabled } + expect( + index + .navItems(permissionManager) + .find((n) => n.name === 'Users') + .enabled() + ).toBe(enabled) }) }) describe('group management', () => { it.each([true, false])('should be enabled according to the permissions', (enabled) => { - ;(window as any).__$permissionManager = { - hasUserManagement: () => enabled - } - expect(index.navItems.find((n) => n.name === 'Groups').enabled()).toBe(enabled) + const permissionManager = { hasUserManagement: () => enabled } + expect( + index + .navItems(permissionManager) + .find((n) => n.name === 'Groups') + .enabled() + ).toBe(enabled) }) }) describe('space management', () => { it.each([true, false])('should be enabled according to the permissions', (enabled) => { - ;(window as any).__$permissionManager = { - hasSpaceManagement: () => enabled - } - expect(index.navItems.find((n) => n.name === 'Spaces').enabled()).toBe(enabled) + const permissionManager = { hasSpaceManagement: () => enabled } + expect( + index + .navItems(permissionManager) + .find((n) => n.name === 'Spaces') + .enabled() + ).toBe(enabled) }) }) }) describe('routes', () => { describe('default-route "/"', () => { it('should redirect to general if permission given', () => { - ;(window as any).__$permissionManager = { - hasSystemManagement: () => true - } - expect(index.routes.find((n) => n.path === '/').redirect().name).toEqual( - 'admin-settings-general' - ) + const permissionManager = { hasSystemManagement: () => true } + expect( + index + .routes(permissionManager) + .find((n) => n.path === '/') + .redirect().name + ).toEqual('admin-settings-general') }) it('should redirect to space management if no system management permission given', () => { - ;(window as any).__$permissionManager = { - hasSystemManagement: () => false - } - expect(index.routes.find((n) => n.path === '/').redirect().name).toEqual( - 'admin-settings-spaces' - ) + const permissionManager = { hasSystemManagement: () => false } + expect( + index + .routes(permissionManager) + .find((n) => n.path === '/') + .redirect().name + ).toEqual('admin-settings-spaces') }) }) }) diff --git a/packages/web-runtime/src/container/application/classic.ts b/packages/web-runtime/src/container/application/classic.ts index 2909edae38f..eeddb908fbe 100644 --- a/packages/web-runtime/src/container/application/classic.ts +++ b/packages/web-runtime/src/container/application/classic.ts @@ -6,6 +6,7 @@ import { NextApplication } from './next' import { Store } from 'vuex' import { Router } from 'vue-router' import { RuntimeError } from '../error' +import { PermissionManager } from 'web-pkg' /** * this wraps a classic application structure into a next application format. @@ -13,17 +14,25 @@ import { RuntimeError } from '../error' */ class ClassicApplication extends NextApplication { private readonly applicationScript: ClassicApplicationScript + private readonly permissionManager: PermissionManager - constructor(runtimeApi: RuntimeApi, applicationScript: ClassicApplicationScript) { + constructor( + runtimeApi: RuntimeApi, + applicationScript: ClassicApplicationScript, + permissionManager: PermissionManager + ) { super(runtimeApi) this.applicationScript = applicationScript + this.permissionManager = permissionManager } initialize(): Promise { const { routes, navItems, translations, quickActions, store } = this.applicationScript + const _routes = typeof routes === 'function' ? routes(this.permissionManager) : routes + const _navItems = typeof navItems === 'function' ? navItems(this.permissionManager) : navItems - routes && this.runtimeApi.announceRoutes(routes) - navItems && this.runtimeApi.announceNavigationItems(navItems) + routes && this.runtimeApi.announceRoutes(_routes) + navItems && this.runtimeApi.announceNavigationItems(_navItems) translations && this.runtimeApi.announceTranslations(translations) quickActions && this.runtimeApi.announceQuickActions(quickActions) store && this.runtimeApi.announceStore(store) @@ -66,19 +75,22 @@ class ClassicApplication extends NextApplication { * @param router * @param translations * @param supportedLanguages + * @param permissionManager */ export const convertClassicApplication = async ({ applicationScript, store, router, translations, - supportedLanguages + supportedLanguages, + permissionManager }: { applicationScript: ClassicApplicationScript store: Store router: Router translations: unknown supportedLanguages: { [key: string]: string } + permissionManager: PermissionManager }): Promise => { const { appInfo } = applicationScript @@ -107,5 +119,5 @@ export const convertClassicApplication = async ({ await store.dispatch('registerApp', applicationScript.appInfo) - return new ClassicApplication(runtimeApi, applicationScript) + return new ClassicApplication(runtimeApi, applicationScript, permissionManager) } diff --git a/packages/web-runtime/src/container/application/index.ts b/packages/web-runtime/src/container/application/index.ts index 6ae6206e77b..344adac7b9e 100644 --- a/packages/web-runtime/src/container/application/index.ts +++ b/packages/web-runtime/src/container/application/index.ts @@ -14,7 +14,7 @@ import * as luxon from 'luxon' // eslint-disable-line import * as vueGettext from 'vue3-gettext' // eslint-disable-line import { urlJoin } from 'web-client/src/utils' -import { ConfigurationManager } from 'web-pkg' +import { ConfigurationManager, PermissionManager } from 'web-pkg' export { NextApplication } from './next' @@ -57,7 +57,8 @@ export const buildApplication = async ({ router, translations, supportedLanguages, - configurationManager + configurationManager, + permissionManager }: { applicationPath: string store: Store @@ -65,6 +66,7 @@ export const buildApplication = async ({ translations: unknown supportedLanguages: { [key: string]: string } configurationManager: ConfigurationManager + permissionManager: PermissionManager }): Promise => { if (applicationStore.has(applicationPath)) { throw new RuntimeError('application already announced', applicationPath) @@ -115,7 +117,8 @@ export const buildApplication = async ({ store, router, translations, - supportedLanguages + supportedLanguages, + permissionManager }).catch() } } catch (err) { diff --git a/packages/web-runtime/src/container/bootstrap.ts b/packages/web-runtime/src/container/bootstrap.ts index 57069b20fd2..16532952780 100644 --- a/packages/web-runtime/src/container/bootstrap.ts +++ b/packages/web-runtime/src/container/bootstrap.ts @@ -102,6 +102,7 @@ export const announceClient = async (runtimeConfiguration: RuntimeConfiguration) * @param router * @param translations * @param supportedLanguages + * @param permissionManager */ export const initializeApplications = async ({ runtimeConfiguration, @@ -109,7 +110,8 @@ export const initializeApplications = async ({ store, router, translations, - supportedLanguages + supportedLanguages, + permissionManager }: { runtimeConfiguration: RuntimeConfiguration configurationManager: ConfigurationManager @@ -117,6 +119,7 @@ export const initializeApplications = async ({ router: Router translations: unknown supportedLanguages: { [key: string]: string } + permissionManager: PermissionManager }): Promise => { const { apps: internalApplications = [], external_apps: externalApplications = [] } = rewriteDeprecatedAppNames(runtimeConfiguration) @@ -134,7 +137,8 @@ export const initializeApplications = async ({ supportedLanguages, router, translations, - configurationManager + configurationManager, + permissionManager }) ) ) diff --git a/packages/web-runtime/src/container/types.ts b/packages/web-runtime/src/container/types.ts index 5ab5c360fc4..f95ba1614c4 100644 --- a/packages/web-runtime/src/container/types.ts +++ b/packages/web-runtime/src/container/types.ts @@ -65,8 +65,8 @@ export interface ApplicationTranslations { export interface ClassicApplicationScript { appInfo?: ApplicationInformation store?: Store - routes?: RouteRecordRaw[] - navItems?: ApplicationNavigationItem[] + routes?: ((...args) => RouteRecordRaw[]) | RouteRecordRaw[] + navItems?: ((...args) => ApplicationNavigationItem[]) | ApplicationNavigationItem[] quickActions?: ApplicationQuickActions translations?: ApplicationTranslations initialize?: () => void diff --git a/packages/web-runtime/src/index.ts b/packages/web-runtime/src/index.ts index eb894223907..5f4b0c83551 100644 --- a/packages/web-runtime/src/index.ts +++ b/packages/web-runtime/src/index.ts @@ -53,7 +53,8 @@ export const bootstrapApp = async (configurationPath: string): Promise => store, supportedLanguages, router, - translations + translations, + permissionManager: app.config.globalProperties.$permissionManager }) const themePromise = announceTheme({ store, app, designSystem, runtimeConfiguration }) await Promise.all([applicationsPromise, themePromise]) From 3e2ff7255b43a6fa84bd4fd229dfaa7bc3c5ab21 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Wed, 15 Feb 2023 10:33:43 +0100 Subject: [PATCH 2/4] Use app --- .../src/container/application/classic.ts | 26 ++++++++----------- .../src/container/application/index.ts | 13 +++++----- .../web-runtime/src/container/bootstrap.ts | 12 ++++----- packages/web-runtime/src/index.ts | 4 +-- 4 files changed, 26 insertions(+), 29 deletions(-) diff --git a/packages/web-runtime/src/container/application/classic.ts b/packages/web-runtime/src/container/application/classic.ts index eeddb908fbe..b16ecc427da 100644 --- a/packages/web-runtime/src/container/application/classic.ts +++ b/packages/web-runtime/src/container/application/classic.ts @@ -6,7 +6,6 @@ import { NextApplication } from './next' import { Store } from 'vuex' import { Router } from 'vue-router' import { RuntimeError } from '../error' -import { PermissionManager } from 'web-pkg' /** * this wraps a classic application structure into a next application format. @@ -14,22 +13,19 @@ import { PermissionManager } from 'web-pkg' */ class ClassicApplication extends NextApplication { private readonly applicationScript: ClassicApplicationScript - private readonly permissionManager: PermissionManager + private readonly app: App - constructor( - runtimeApi: RuntimeApi, - applicationScript: ClassicApplicationScript, - permissionManager: PermissionManager - ) { + constructor(runtimeApi: RuntimeApi, applicationScript: ClassicApplicationScript, app: App) { super(runtimeApi) this.applicationScript = applicationScript - this.permissionManager = permissionManager + this.app = app } initialize(): Promise { const { routes, navItems, translations, quickActions, store } = this.applicationScript - const _routes = typeof routes === 'function' ? routes(this.permissionManager) : routes - const _navItems = typeof navItems === 'function' ? navItems(this.permissionManager) : navItems + const permissionManager = this.app.config.globalProperties.$permissionManager + const _routes = typeof routes === 'function' ? routes(permissionManager) : routes + const _navItems = typeof navItems === 'function' ? navItems(permissionManager) : navItems routes && this.runtimeApi.announceRoutes(_routes) navItems && this.runtimeApi.announceNavigationItems(_navItems) @@ -70,27 +66,27 @@ class ClassicApplication extends NextApplication { /** * + * @param app * @param applicationPath * @param store * @param router * @param translations * @param supportedLanguages - * @param permissionManager */ export const convertClassicApplication = async ({ + app, applicationScript, store, router, translations, - supportedLanguages, - permissionManager + supportedLanguages }: { + app: App applicationScript: ClassicApplicationScript store: Store router: Router translations: unknown supportedLanguages: { [key: string]: string } - permissionManager: PermissionManager }): Promise => { const { appInfo } = applicationScript @@ -119,5 +115,5 @@ export const convertClassicApplication = async ({ await store.dispatch('registerApp', applicationScript.appInfo) - return new ClassicApplication(runtimeApi, applicationScript, permissionManager) + return new ClassicApplication(runtimeApi, applicationScript, app) } diff --git a/packages/web-runtime/src/container/application/index.ts b/packages/web-runtime/src/container/application/index.ts index 344adac7b9e..a2f98c6a98b 100644 --- a/packages/web-runtime/src/container/application/index.ts +++ b/packages/web-runtime/src/container/application/index.ts @@ -14,7 +14,8 @@ import * as luxon from 'luxon' // eslint-disable-line import * as vueGettext from 'vue3-gettext' // eslint-disable-line import { urlJoin } from 'web-client/src/utils' -import { ConfigurationManager, PermissionManager } from 'web-pkg' +import { ConfigurationManager } from 'web-pkg' +import { App } from 'vue' export { NextApplication } from './next' @@ -52,21 +53,21 @@ const loadScriptRequireJS = (moduleUri: string) => { * @param args */ export const buildApplication = async ({ + app, applicationPath, store, router, translations, supportedLanguages, - configurationManager, - permissionManager + configurationManager }: { + app: App applicationPath: string store: Store router: Router translations: unknown supportedLanguages: { [key: string]: string } configurationManager: ConfigurationManager - permissionManager: PermissionManager }): Promise => { if (applicationStore.has(applicationPath)) { throw new RuntimeError('application already announced', applicationPath) @@ -113,12 +114,12 @@ export const buildApplication = async ({ throw new RuntimeError('next applications not implemented yet, stay tuned') } else { application = await convertClassicApplication({ + app, applicationScript, store, router, translations, - supportedLanguages, - permissionManager + supportedLanguages }).catch() } } catch (err) { diff --git a/packages/web-runtime/src/container/bootstrap.ts b/packages/web-runtime/src/container/bootstrap.ts index 16532952780..b66b5b74947 100644 --- a/packages/web-runtime/src/container/bootstrap.ts +++ b/packages/web-runtime/src/container/bootstrap.ts @@ -97,29 +97,29 @@ export const announceClient = async (runtimeConfiguration: RuntimeConfiguration) * - bulk build all applications * - bulk register all applications, no other application is guaranteed to be registered here, don't request one * + * @param app * @param runtimeConfiguration * @param store * @param router * @param translations * @param supportedLanguages - * @param permissionManager */ export const initializeApplications = async ({ + app, runtimeConfiguration, configurationManager, store, router, translations, - supportedLanguages, - permissionManager + supportedLanguages }: { + app: App runtimeConfiguration: RuntimeConfiguration configurationManager: ConfigurationManager store: Store router: Router translations: unknown supportedLanguages: { [key: string]: string } - permissionManager: PermissionManager }): Promise => { const { apps: internalApplications = [], external_apps: externalApplications = [] } = rewriteDeprecatedAppNames(runtimeConfiguration) @@ -132,13 +132,13 @@ export const initializeApplications = async ({ const applicationResults = await Promise.allSettled( applicationPaths.map((applicationPath) => buildApplication({ + app, applicationPath, store, supportedLanguages, router, translations, - configurationManager, - permissionManager + configurationManager }) ) ) diff --git a/packages/web-runtime/src/index.ts b/packages/web-runtime/src/index.ts index 5f4b0c83551..df21e0ccfe0 100644 --- a/packages/web-runtime/src/index.ts +++ b/packages/web-runtime/src/index.ts @@ -48,13 +48,13 @@ export const bootstrapApp = async (configurationPath: string): Promise => announcePermissionManager({ app, store }) const applicationsPromise = await initializeApplications({ + app, runtimeConfiguration, configurationManager, store, supportedLanguages, router, - translations, - permissionManager: app.config.globalProperties.$permissionManager + translations }) const themePromise = announceTheme({ store, app, designSystem, runtimeConfiguration }) await Promise.all([applicationsPromise, themePromise]) From 2f791b3b9f80eff505e12c912088fe375e0413d2 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Wed, 15 Feb 2023 10:35:16 +0100 Subject: [PATCH 3/4] Fix bootstrap unit test --- packages/web-runtime/tests/unit/container/bootstrap.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/web-runtime/tests/unit/container/bootstrap.spec.ts b/packages/web-runtime/tests/unit/container/bootstrap.spec.ts index 0e776cb7e71..82faa968cea 100644 --- a/packages/web-runtime/tests/unit/container/bootstrap.spec.ts +++ b/packages/web-runtime/tests/unit/container/bootstrap.spec.ts @@ -31,6 +31,7 @@ describe('initialize applications', () => { jest.mocked(buildApplication).mockImplementation(buildApplicationMock) const applications = await initializeApplications({ + app: createApp(defineComponent({})), configurationManager: mockDeep(), runtimeConfiguration: { apps: ['internalFishy', 'internalValid'], From 56bcf78f9453862e60da890629ee33eaf443f228 Mon Sep 17 00:00:00 2001 From: Jannik Stehle Date: Wed, 15 Feb 2023 10:41:11 +0100 Subject: [PATCH 4/4] Pass globalProperties as object --- packages/web-app-admin-settings/src/index.ts | 14 +++++------ .../tests/unit/index.spec.ts | 24 +++++++++---------- .../src/container/application/classic.ts | 6 ++--- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/web-app-admin-settings/src/index.ts b/packages/web-app-admin-settings/src/index.ts index 46ba7d85e77..818e1054c43 100644 --- a/packages/web-app-admin-settings/src/index.ts +++ b/packages/web-app-admin-settings/src/index.ts @@ -15,11 +15,11 @@ const appInfo = { isFileEditor: false } -const routes = (permissionManager) => [ +const routes = ({ $permissionManager }) => [ { path: '/', redirect: () => { - if (permissionManager.hasSystemManagement()) { + if ($permissionManager.hasSystemManagement()) { return { name: 'admin-settings-general' } } return { name: 'admin-settings-spaces' } @@ -63,7 +63,7 @@ const routes = (permissionManager) => [ } ] -const navItems = (permissionManager) => [ +const navItems = ({ $permissionManager }) => [ { name: $gettext('General'), icon: 'settings-4', @@ -71,7 +71,7 @@ const navItems = (permissionManager) => [ path: `/${appInfo.id}/general?` }, enabled: () => { - return permissionManager.hasSystemManagement() + return $permissionManager.hasSystemManagement() } }, { @@ -81,7 +81,7 @@ const navItems = (permissionManager) => [ path: `/${appInfo.id}/users?` }, enabled: () => { - return permissionManager.hasUserManagement() + return $permissionManager.hasUserManagement() } }, { @@ -91,7 +91,7 @@ const navItems = (permissionManager) => [ path: `/${appInfo.id}/groups?` }, enabled: () => { - return permissionManager.hasUserManagement() + return $permissionManager.hasUserManagement() } }, { @@ -101,7 +101,7 @@ const navItems = (permissionManager) => [ path: `/${appInfo.id}/spaces?` }, enabled: () => { - return permissionManager.hasSpaceManagement() + return $permissionManager.hasSpaceManagement() } } ] diff --git a/packages/web-app-admin-settings/tests/unit/index.spec.ts b/packages/web-app-admin-settings/tests/unit/index.spec.ts index 918973d8c1c..5bf3d461d70 100644 --- a/packages/web-app-admin-settings/tests/unit/index.spec.ts +++ b/packages/web-app-admin-settings/tests/unit/index.spec.ts @@ -4,10 +4,10 @@ describe('admin settings index', () => { describe('navItems', () => { describe('general', () => { it.each([true, false])('should be enabled according to the permissions', (enabled) => { - const permissionManager = { hasSystemManagement: () => enabled } + const $permissionManager = { hasSystemManagement: () => enabled } expect( index - .navItems(permissionManager) + .navItems({ $permissionManager }) .find((n) => n.name === 'General') .enabled() ).toBe(enabled) @@ -15,10 +15,10 @@ describe('admin settings index', () => { }) describe('user management', () => { it.each([true, false])('should be enabled according to the permissions', (enabled) => { - const permissionManager = { hasUserManagement: () => enabled } + const $permissionManager = { hasUserManagement: () => enabled } expect( index - .navItems(permissionManager) + .navItems({ $permissionManager }) .find((n) => n.name === 'Users') .enabled() ).toBe(enabled) @@ -26,10 +26,10 @@ describe('admin settings index', () => { }) describe('group management', () => { it.each([true, false])('should be enabled according to the permissions', (enabled) => { - const permissionManager = { hasUserManagement: () => enabled } + const $permissionManager = { hasUserManagement: () => enabled } expect( index - .navItems(permissionManager) + .navItems({ $permissionManager }) .find((n) => n.name === 'Groups') .enabled() ).toBe(enabled) @@ -37,10 +37,10 @@ describe('admin settings index', () => { }) describe('space management', () => { it.each([true, false])('should be enabled according to the permissions', (enabled) => { - const permissionManager = { hasSpaceManagement: () => enabled } + const $permissionManager = { hasSpaceManagement: () => enabled } expect( index - .navItems(permissionManager) + .navItems({ $permissionManager }) .find((n) => n.name === 'Spaces') .enabled() ).toBe(enabled) @@ -50,19 +50,19 @@ describe('admin settings index', () => { describe('routes', () => { describe('default-route "/"', () => { it('should redirect to general if permission given', () => { - const permissionManager = { hasSystemManagement: () => true } + const $permissionManager = { hasSystemManagement: () => true } expect( index - .routes(permissionManager) + .routes({ $permissionManager }) .find((n) => n.path === '/') .redirect().name ).toEqual('admin-settings-general') }) it('should redirect to space management if no system management permission given', () => { - const permissionManager = { hasSystemManagement: () => false } + const $permissionManager = { hasSystemManagement: () => false } expect( index - .routes(permissionManager) + .routes({ $permissionManager }) .find((n) => n.path === '/') .redirect().name ).toEqual('admin-settings-spaces') diff --git a/packages/web-runtime/src/container/application/classic.ts b/packages/web-runtime/src/container/application/classic.ts index b16ecc427da..a861b918186 100644 --- a/packages/web-runtime/src/container/application/classic.ts +++ b/packages/web-runtime/src/container/application/classic.ts @@ -23,9 +23,9 @@ class ClassicApplication extends NextApplication { initialize(): Promise { const { routes, navItems, translations, quickActions, store } = this.applicationScript - const permissionManager = this.app.config.globalProperties.$permissionManager - const _routes = typeof routes === 'function' ? routes(permissionManager) : routes - const _navItems = typeof navItems === 'function' ? navItems(permissionManager) : navItems + const { globalProperties } = this.app.config + const _routes = typeof routes === 'function' ? routes(globalProperties) : routes + const _navItems = typeof navItems === 'function' ? navItems(globalProperties) : navItems routes && this.runtimeApi.announceRoutes(_routes) navItems && this.runtimeApi.announceNavigationItems(_navItems)