Browse Source

Fix - Accounts in account selection filter in assistant do not adapt in impersonation mode

pull/6231/head
Anurag9977 2 weeks ago
parent
commit
8a8324bcaf
  1. 10
      apps/api/src/app/user/user.controller.ts
  2. 2
      apps/api/src/app/user/user.module.ts
  3. 18
      apps/api/src/app/user/user.service.ts

10
apps/api/src/app/user/user.controller.ts

@ -1,8 +1,10 @@
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
import { import {
DeleteOwnUserDto, DeleteOwnUserDto,
UpdateOwnAccessTokenDto, UpdateOwnAccessTokenDto,
@ -43,6 +45,7 @@ import { UserService } from './user.service';
export class UserController { export class UserController {
public constructor( public constructor(
private readonly configurationService: ConfigurationService, private readonly configurationService: ConfigurationService,
private readonly impersonationService: ImpersonationService,
private readonly jwtService: JwtService, private readonly jwtService: JwtService,
private readonly prismaService: PrismaService, private readonly prismaService: PrismaService,
private readonly propertyService: PropertyService, private readonly propertyService: PropertyService,
@ -108,10 +111,15 @@ export class UserController {
@Get() @Get()
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getUser( public async getUser(
@Headers('accept-language') acceptLanguage: string @Headers('accept-language') acceptLanguage: string,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string
): Promise<User> { ): Promise<User> {
const impersonationUserId =
await this.impersonationService.validateImpersonationId(impersonationId);
return this.userService.getUser( return this.userService.getUser(
this.request.user, this.request.user,
impersonationUserId,
acceptLanguage?.split(',')?.[0] acceptLanguage?.split(',')?.[0]
); );
} }

2
apps/api/src/app/user/user.module.ts

@ -2,6 +2,7 @@ import { OrderModule } from '@ghostfolio/api/app/order/order.module';
import { SubscriptionModule } from '@ghostfolio/api/app/subscription/subscription.module'; import { SubscriptionModule } from '@ghostfolio/api/app/subscription/subscription.module';
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { I18nModule } from '@ghostfolio/api/services/i18n/i18n.module'; import { I18nModule } from '@ghostfolio/api/services/i18n/i18n.module';
import { ImpersonationModule } from '@ghostfolio/api/services/impersonation/impersonation.module';
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
import { PropertyModule } from '@ghostfolio/api/services/property/property.module'; import { PropertyModule } from '@ghostfolio/api/services/property/property.module';
import { TagModule } from '@ghostfolio/api/services/tag/tag.module'; import { TagModule } from '@ghostfolio/api/services/tag/tag.module';
@ -18,6 +19,7 @@ import { UserService } from './user.service';
imports: [ imports: [
ConfigurationModule, ConfigurationModule,
I18nModule, I18nModule,
ImpersonationModule,
JwtModule.register({ JwtModule.register({
secret: process.env.JWT_SECRET_KEY, secret: process.env.JWT_SECRET_KEY,
signOptions: { expiresIn: '30 days' } signOptions: { expiresIn: '30 days' }

18
apps/api/src/app/user/user.service.ts

@ -98,6 +98,7 @@ export class UserService {
public async getUser( public async getUser(
{ accounts, id, permissions, settings, subscription }: UserWithSettings, { accounts, id, permissions, settings, subscription }: UserWithSettings,
impersonationUserId: string,
aLocale = locale aLocale = locale
): Promise<IUser> { ): Promise<IUser> {
const userData = await Promise.all([ const userData = await Promise.all([
@ -108,6 +109,14 @@ export class UserService {
orderBy: { alias: 'asc' }, orderBy: { alias: 'asc' },
where: { granteeUserId: id } where: { granteeUserId: id }
}), }),
this.prismaService.account.findMany({
orderBy: {
name: 'asc'
},
where: {
userId: impersonationUserId
}
}),
this.prismaService.order.count({ this.prismaService.order.count({
where: { userId: id } where: { userId: id }
}), }),
@ -121,9 +130,10 @@ export class UserService {
]); ]);
const access = userData[0]; const access = userData[0];
const activitiesCount = userData[1]; const impersonationAccounts = userData[1];
const firstActivity = userData[2]; const activitiesCount = userData[2];
let tags = userData[3].filter((tag) => { const firstActivity = userData[3];
let tags = userData[4].filter((tag) => {
return tag.id !== TAG_ID_EXCLUDE_FROM_ANALYSIS; return tag.id !== TAG_ID_EXCLUDE_FROM_ANALYSIS;
}); });
@ -146,7 +156,6 @@ export class UserService {
} }
return { return {
accounts,
activitiesCount, activitiesCount,
id, id,
permissions, permissions,
@ -160,6 +169,7 @@ export class UserService {
permissions: accessItem.permissions permissions: accessItem.permissions
}; };
}), }),
accounts: impersonationUserId ? impersonationAccounts : accounts,
dateOfFirstActivity: firstActivity?.date ?? new Date(), dateOfFirstActivity: firstActivity?.date ?? new Date(),
settings: { settings: {
...(settings.settings as UserSettings), ...(settings.settings as UserSettings),

Loading…
Cancel
Save