Browse Source

Enhance route configuration to support conditional exclusion from assistant based on user permissions.

pull/4955/head
Hash Palak 2 weeks ago
parent
commit
9312d68ab7
  1. 4
      libs/common/src/lib/routes/interfaces/interfaces.ts
  2. 26
      libs/common/src/lib/routes/routes.ts
  3. 13
      libs/ui/src/lib/assistant/assistant.component.ts

4
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<string, IRoute>;

26
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<string, IRoute> = {
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<string, IRoute> = {
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<string, IRoute> = {
title: $localize`Overview`
},
i18n: {
excludeFromAssistant: true,
excludeFromAssistant: () => {
return true;
},
path: 'i18n',
routerLink: ['/i18n'],
title: $localize`Internationalization`
@ -130,13 +142,17 @@ export const internalRoutes: Record<string, IRoute> = {
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: {

13
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);

Loading…
Cancel
Save