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 { export interface IRoute {
excludeFromAssistant?: boolean; excludeFromAssistant?: boolean | ((aUser: User) => boolean);
path: string; path: string;
routerLink: string[]; routerLink: string[];
subRoutes?: Record<string, IRoute>; 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 '@angular/localize/init';
import { IRoute } from './interfaces/interfaces'; import { IRoute } from './interfaces/interfaces';
@ -21,6 +24,9 @@ export const internalRoutes: Record<string, IRoute> = {
title: $localize`Settings` title: $localize`Settings`
}, },
adminControl: { adminControl: {
excludeFromAssistant: (aUser: User) => {
return hasPermission(aUser?.permissions, permissions.accessAdminControl);
},
path: 'admin', path: 'admin',
routerLink: ['/admin'], routerLink: ['/admin'],
subRoutes: { subRoutes: {
@ -53,13 +59,17 @@ export const internalRoutes: Record<string, IRoute> = {
title: $localize`Accounts` title: $localize`Accounts`
}, },
api: { api: {
excludeFromAssistant: true, excludeFromAssistant: () => {
return true;
},
path: 'api', path: 'api',
routerLink: ['/api'], routerLink: ['/api'],
title: 'Ghostfolio API' title: 'Ghostfolio API'
}, },
auth: { auth: {
excludeFromAssistant: true, excludeFromAssistant: () => {
return true;
},
path: 'auth', path: 'auth',
routerLink: ['/auth'], routerLink: ['/auth'],
title: $localize`Sign in` title: $localize`Sign in`
@ -92,7 +102,9 @@ export const internalRoutes: Record<string, IRoute> = {
title: $localize`Overview` title: $localize`Overview`
}, },
i18n: { i18n: {
excludeFromAssistant: true, excludeFromAssistant: () => {
return true;
},
path: 'i18n', path: 'i18n',
routerLink: ['/i18n'], routerLink: ['/i18n'],
title: $localize`Internationalization` title: $localize`Internationalization`
@ -130,13 +142,17 @@ export const internalRoutes: Record<string, IRoute> = {
title: $localize`Portfolio` title: $localize`Portfolio`
}, },
webauthn: { webauthn: {
excludeFromAssistant: true, excludeFromAssistant: () => {
return true;
},
path: 'webauthn', path: 'webauthn',
routerLink: ['/webauthn'], routerLink: ['/webauthn'],
title: $localize`Sign in` title: $localize`Sign in`
}, },
zen: { zen: {
excludeFromAssistant: true, excludeFromAssistant: () => {
return true;
},
path: 'zen', path: 'zen',
routerLink: ['/zen'], routerLink: ['/zen'],
subRoutes: { 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 searchTerm = aSearchTerm.toLowerCase();
const allRoutes = Object.values(internalRoutes) const allRoutes = Object.values(internalRoutes)
.filter(({ excludeFromAssistant, path }) => { .filter(({ excludeFromAssistant }) => {
// Exclude routes based on excludeFromAssistant flag if (typeof excludeFromAssistant === 'function') {
if (excludeFromAssistant) { return !excludeFromAssistant(this.user);
return false;
} }
if (path === 'admin' && !this.hasPermissionToAccessAdminControl) { return !excludeFromAssistant;
return false;
}
return true;
}) })
.reduce((acc, route) => { .reduce((acc, route) => {
acc.push(route); acc.push(route);

Loading…
Cancel
Save