diff --git a/apps/web/src/app/admin-console/organizations/core/services/user-admin.service.ts b/apps/web/src/app/admin-console/organizations/core/services/user-admin.service.ts index 9741758e1e..61fc27614d 100644 --- a/apps/web/src/app/admin-console/organizations/core/services/user-admin.service.ts +++ b/apps/web/src/app/admin-console/organizations/core/services/user-admin.service.ts @@ -4,19 +4,14 @@ import { OrganizationUserApiService, OrganizationUserInviteRequest, OrganizationUserUpdateRequest, - OrganizationUserDetailsResponse, } from "@bitwarden/admin-console/common"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { CoreOrganizationModule } from "../core-organization.module"; import { OrganizationUserAdminView } from "../views/organization-user-admin-view"; @Injectable({ providedIn: CoreOrganizationModule }) export class UserAdminService { - constructor( - private configService: ConfigService, - private organizationUserApiService: OrganizationUserApiService, - ) {} + constructor(private organizationUserApiService: OrganizationUserApiService) {} async get( organizationId: string, @@ -34,9 +29,7 @@ export class UserAdminService { return undefined; } - const [view] = await this.decryptMany(organizationId, [userResponse]); - - return view; + return OrganizationUserAdminView.fromResponse(organizationId, userResponse); } async save(user: OrganizationUserAdminView): Promise { @@ -65,35 +58,4 @@ export class UserAdminService { await this.organizationUserApiService.postOrganizationUserInvite(user.organizationId, request); } - - private async decryptMany( - organizationId: string, - users: OrganizationUserDetailsResponse[], - ): Promise { - const promises = users.map(async (u) => { - const view = new OrganizationUserAdminView(); - - view.id = u.id; - view.organizationId = organizationId; - view.userId = u.userId; - view.type = u.type; - view.status = u.status; - view.externalId = u.externalId; - view.permissions = u.permissions; - view.resetPasswordEnrolled = u.resetPasswordEnrolled; - view.collections = u.collections.map((c) => ({ - id: c.id, - hidePasswords: c.hidePasswords, - readOnly: c.readOnly, - manage: c.manage, - })); - view.groups = u.groups; - view.accessSecretsManager = u.accessSecretsManager; - view.hasMasterPassword = u.hasMasterPassword; - - return view; - }); - - return await Promise.all(promises); - } } diff --git a/apps/web/src/app/admin-console/organizations/core/views/organization-user-admin-view.ts b/apps/web/src/app/admin-console/organizations/core/views/organization-user-admin-view.ts index b9b034b405..63a8c938e2 100644 --- a/apps/web/src/app/admin-console/organizations/core/views/organization-user-admin-view.ts +++ b/apps/web/src/app/admin-console/organizations/core/views/organization-user-admin-view.ts @@ -1,4 +1,7 @@ -import { CollectionAccessSelectionView } from "@bitwarden/admin-console/common"; +import { + CollectionAccessSelectionView, + OrganizationUserDetailsResponse, +} from "@bitwarden/admin-console/common"; import { OrganizationUserStatusType, OrganizationUserType, @@ -15,9 +18,38 @@ export class OrganizationUserAdminView { permissions: PermissionsApi; resetPasswordEnrolled: boolean; hasMasterPassword: boolean; + managedByOrganization: boolean; collections: CollectionAccessSelectionView[] = []; groups: string[] = []; accessSecretsManager: boolean; + + static fromResponse( + organizationId: string, + response: OrganizationUserDetailsResponse, + ): OrganizationUserAdminView { + const view = new OrganizationUserAdminView(); + + view.id = response.id; + view.organizationId = organizationId; + view.userId = response.userId; + view.type = response.type; + view.status = response.status; + view.externalId = response.externalId; + view.permissions = response.permissions; + view.resetPasswordEnrolled = response.resetPasswordEnrolled; + view.collections = response.collections.map((c) => ({ + id: c.id, + hidePasswords: c.hidePasswords, + readOnly: c.readOnly, + manage: c.manage, + })); + view.groups = response.groups; + view.accessSecretsManager = response.accessSecretsManager; + view.hasMasterPassword = response.hasMasterPassword; + view.managedByOrganization = response.managedByOrganization; + + return view; + } } diff --git a/apps/web/src/app/admin-console/organizations/core/views/organization-user.view.ts b/apps/web/src/app/admin-console/organizations/core/views/organization-user.view.ts index 7d1a10c533..eac80dd024 100644 --- a/apps/web/src/app/admin-console/organizations/core/views/organization-user.view.ts +++ b/apps/web/src/app/admin-console/organizations/core/views/organization-user.view.ts @@ -25,6 +25,7 @@ export class OrganizationUserView { * True if this organizaztion user has been granted access to Secrets Manager, false otherwise. */ accessSecretsManager: boolean; + managedByOrganization: boolean; collections: CollectionAccessSelectionView[] = []; groups: string[] = []; diff --git a/libs/admin-console/src/common/organization-user/models/responses/organization-user.response.ts b/libs/admin-console/src/common/organization-user/models/responses/organization-user.response.ts index 7323855f69..f61d9325c2 100644 --- a/libs/admin-console/src/common/organization-user/models/responses/organization-user.response.ts +++ b/libs/admin-console/src/common/organization-user/models/responses/organization-user.response.ts @@ -49,6 +49,7 @@ export class OrganizationUserUserDetailsResponse extends OrganizationUserRespons avatarColor: string; twoFactorEnabled: boolean; usesKeyConnector: boolean; + managedByOrganization: boolean; constructor(response: any) { super(response); @@ -57,12 +58,16 @@ export class OrganizationUserUserDetailsResponse extends OrganizationUserRespons this.avatarColor = this.getResponseProperty("AvatarColor"); this.twoFactorEnabled = this.getResponseProperty("TwoFactorEnabled"); this.usesKeyConnector = this.getResponseProperty("UsesKeyConnector") ?? false; + this.managedByOrganization = this.getResponseProperty("ManagedByOrganization") ?? false; } } export class OrganizationUserDetailsResponse extends OrganizationUserResponse { + managedByOrganization: boolean; + constructor(response: any) { super(response); + this.managedByOrganization = this.getResponseProperty("ManagedByOrganization") ?? false; } }