Browse Source

Enhance analysis page to incorporate restricted access checks for isInPercent condition and update related logic for user permissions

pull/4958/head
felixjordandev 6 days ago
parent
commit
d0c36eb5ee
  1. 23
      apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts
  2. 6
      apps/client/src/app/pages/portfolio/analysis/analysis-page.html

23
apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts

@ -11,7 +11,7 @@ import {
ToggleOption,
User
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { hasPermission, hasReadRestrictedAccessPermission, permissions } from '@ghostfolio/common/permissions';
import type { AiPromptMode, GroupBy } from '@ghostfolio/common/types';
import { translate } from '@ghostfolio/ui/i18n';
@ -51,6 +51,7 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
public dividendTimelineDataLabel = $localize`Dividend`;
public firstOrderDate: Date;
public hasImpersonationId: boolean;
public hasRestrictedAccess = false;
public hasPermissionToReadAiPrompt: boolean;
public investments: InvestmentItem[];
public investmentTimelineDataLabel = $localize`Investment`;
@ -93,7 +94,7 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
get savingsRate() {
const savingsRatePerMonth =
this.hasImpersonationId || this.user.settings.isRestrictedView
(this.hasImpersonationId && this.hasRestrictedAccess) || this.user.settings.isRestrictedView
? undefined
: this.user?.settings?.savingsRate;
@ -110,6 +111,15 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe((impersonationId) => {
this.hasImpersonationId = !!impersonationId;
if (this.hasImpersonationId && this.user) {
this.hasRestrictedAccess = hasReadRestrictedAccessPermission({
impersonationId,
user: this.user as any
});
} else {
this.hasRestrictedAccess = false;
}
});
this.userService.stateChanged
@ -118,6 +128,15 @@ export class AnalysisPageComponent implements OnDestroy, OnInit {
if (state?.user) {
this.user = state.user;
// Update hasRestrictedAccess when user changes
const impersonationId = this.impersonationStorageService.getId();
if (impersonationId) {
this.hasRestrictedAccess = hasReadRestrictedAccessPermission({
impersonationId,
user: this.user as any
});
}
this.benchmark = this.benchmarks.find(({ id }) => {
return id === this.user.settings?.benchmark;
});

6
apps/client/src/app/pages/portfolio/analysis/analysis-page.html

@ -351,7 +351,7 @@
[benchmarkDataLabel]="portfolioEvolutionDataLabel"
[currency]="user?.settings?.baseCurrency"
[historicalDataItems]="performanceDataItems"
[isInPercent]="user.settings.isRestrictedView"
[isInPercent]="user.settings.isRestrictedView || (hasImpersonationId && hasRestrictedAccess)"
[isLoading]="isLoadingInvestmentChart"
[locale]="user?.settings?.locale"
/>
@ -407,7 +407,7 @@
[benchmarkDataLabel]="investmentTimelineDataLabel"
[currency]="user?.settings?.baseCurrency"
[groupBy]="mode"
[isInPercent]="user.settings.isRestrictedView"
[isInPercent]="user.settings.isRestrictedView || (hasImpersonationId && hasRestrictedAccess)"
[isLoading]="isLoadingInvestmentTimelineChart"
[locale]="user?.settings?.locale"
[savingsRate]="savingsRate"
@ -442,7 +442,7 @@
[benchmarkDataLabel]="dividendTimelineDataLabel"
[currency]="user?.settings?.baseCurrency"
[groupBy]="mode"
[isInPercent]="user.settings.isRestrictedView"
[isInPercent]="user.settings.isRestrictedView || (hasImpersonationId && hasRestrictedAccess)"
[isLoading]="isLoadingDividendTimelineChart"
[locale]="user?.settings?.locale"
/>

Loading…
Cancel
Save