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 { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
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 { PropertyService } from '@ghostfolio/api/services/property/property.service';
import { HEADER_KEY_IMPERSONATION } from '@ghostfolio/common/config';
import {
DeleteOwnUserDto,
UpdateOwnAccessTokenDto,
@ -43,6 +45,7 @@ import { UserService } from './user.service';
export class UserController {
public constructor(
private readonly configurationService: ConfigurationService,
private readonly impersonationService: ImpersonationService,
private readonly jwtService: JwtService,
private readonly prismaService: PrismaService,
private readonly propertyService: PropertyService,
@ -108,10 +111,15 @@ export class UserController {
@Get()
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getUser(
@Headers('accept-language') acceptLanguage: string
@Headers('accept-language') acceptLanguage: string,
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string
): Promise<User> {
const impersonationUserId =
await this.impersonationService.validateImpersonationId(impersonationId);
return this.userService.getUser(
this.request.user,
impersonationUserId,
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 { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.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 { PropertyModule } from '@ghostfolio/api/services/property/property.module';
import { TagModule } from '@ghostfolio/api/services/tag/tag.module';
@ -18,6 +19,7 @@ import { UserService } from './user.service';
imports: [
ConfigurationModule,
I18nModule,
ImpersonationModule,
JwtModule.register({
secret: process.env.JWT_SECRET_KEY,
signOptions: { expiresIn: '30 days' }

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

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

Loading…
Cancel
Save