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

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

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

Loading…
Cancel
Save