diff --git a/libs/common/src/lib/routes/interfaces/interfaces.ts b/libs/common/src/lib/routes/interfaces/interfaces.ts index 5e9f65b40..5acbb2350 100644 --- a/libs/common/src/lib/routes/interfaces/interfaces.ts +++ b/libs/common/src/lib/routes/interfaces/interfaces.ts @@ -1,5 +1,7 @@ +import { User } from '@ghostfolio/common/interfaces'; + export interface IRoute { - excludeFromAssistant?: boolean; + excludeFromAssistant?: boolean | ((aUser: User) => boolean); path: string; routerLink: string[]; subRoutes?: Record; diff --git a/libs/common/src/lib/routes/routes.ts b/libs/common/src/lib/routes/routes.ts index 0722cf181..34d7169b5 100644 --- a/libs/common/src/lib/routes/routes.ts +++ b/libs/common/src/lib/routes/routes.ts @@ -1,3 +1,6 @@ +import { User } from '@ghostfolio/common/interfaces'; +import { hasPermission, permissions } from '@ghostfolio/common/permissions'; + import '@angular/localize/init'; import { IRoute } from './interfaces/interfaces'; @@ -21,6 +24,9 @@ export const internalRoutes: Record = { title: $localize`Settings` }, adminControl: { + excludeFromAssistant: (aUser: User) => { + return hasPermission(aUser?.permissions, permissions.accessAdminControl); + }, path: 'admin', routerLink: ['/admin'], subRoutes: { @@ -53,13 +59,17 @@ export const internalRoutes: Record = { title: $localize`Accounts` }, api: { - excludeFromAssistant: true, + excludeFromAssistant: () => { + return true; + }, path: 'api', routerLink: ['/api'], title: 'Ghostfolio API' }, auth: { - excludeFromAssistant: true, + excludeFromAssistant: () => { + return true; + }, path: 'auth', routerLink: ['/auth'], title: $localize`Sign in` @@ -92,7 +102,9 @@ export const internalRoutes: Record = { title: $localize`Overview` }, i18n: { - excludeFromAssistant: true, + excludeFromAssistant: () => { + return true; + }, path: 'i18n', routerLink: ['/i18n'], title: $localize`Internationalization` @@ -130,13 +142,17 @@ export const internalRoutes: Record = { title: $localize`Portfolio` }, webauthn: { - excludeFromAssistant: true, + excludeFromAssistant: () => { + return true; + }, path: 'webauthn', routerLink: ['/webauthn'], title: $localize`Sign in` }, zen: { - excludeFromAssistant: true, + excludeFromAssistant: () => { + return true; + }, path: 'zen', routerLink: ['/zen'], subRoutes: { diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index 82110538c..af6606236 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -626,17 +626,12 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { const searchTerm = aSearchTerm.toLowerCase(); const allRoutes = Object.values(internalRoutes) - .filter(({ excludeFromAssistant, path }) => { - // Exclude routes based on excludeFromAssistant flag - if (excludeFromAssistant) { - return false; + .filter(({ excludeFromAssistant }) => { + if (typeof excludeFromAssistant === 'function') { + return !excludeFromAssistant(this.user); } - if (path === 'admin' && !this.hasPermissionToAccessAdminControl) { - return false; - } - - return true; + return !excludeFromAssistant; }) .reduce((acc, route) => { acc.push(route);