diff --git a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.html b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.html
index 6769998e2c8..8431b01759e 100644
--- a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.html
+++ b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.html
@@ -44,8 +44,8 @@
diff --git a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.stories.ts b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.stories.ts
index 5e00a0cf5d1..5860343f916 100644
--- a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.stories.ts
+++ b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/member-access-report.component.stories.ts
@@ -65,6 +65,7 @@ function createMockMember(index: number): MemberAccessReportView {
groupsCount: ((index * 2) % 5) + 1, // Deterministic: 1-5
itemsCount: ((index * 17) % 200) + 1, // Deterministic: 1-200
usesKeyConnector: index % 2 === 0, // Deterministic: alternating true/false
+ userIdFromOrgUser: `userIdFromOrgUser${index}`,
};
}
diff --git a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/services/member-access-report.service.spec.ts b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/services/member-access-report.service.spec.ts
index bab0d7f228e..cd5a1aed010 100644
--- a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/services/member-access-report.service.spec.ts
+++ b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/services/member-access-report.service.spec.ts
@@ -106,6 +106,7 @@ describe("MemberAccessReportService", () => {
resetPasswordEnrolled: options.resetPasswordEnrolled ?? false,
groups: options.groups ?? [],
avatarColor: options.avatarColor,
+ userId: "userIdFromOrgUser" + id,
});
const createMockCipher = (id: string, collectionIds: string[]): Partial => ({
@@ -224,6 +225,7 @@ describe("MemberAccessReportService", () => {
itemsCount: 0,
userGuid: expect.any(String),
usesKeyConnector: expect.any(Boolean),
+ userIdFromOrgUser: "",
},
{
name: "James Lull",
@@ -234,6 +236,7 @@ describe("MemberAccessReportService", () => {
itemsCount: 0,
userGuid: expect.any(String),
usesKeyConnector: expect.any(Boolean),
+ userIdFromOrgUser: "",
},
{
name: "Beth Williams",
@@ -244,6 +247,7 @@ describe("MemberAccessReportService", () => {
itemsCount: 0,
userGuid: expect.any(String),
usesKeyConnector: expect.any(Boolean),
+ userIdFromOrgUser: "",
},
{
name: "Ray Williams",
@@ -254,6 +258,7 @@ describe("MemberAccessReportService", () => {
itemsCount: 0,
userGuid: expect.any(String),
usesKeyConnector: expect.any(Boolean),
+ userIdFromOrgUser: "",
},
]);
});
@@ -452,6 +457,7 @@ describe("MemberAccessReportService", () => {
collectionsCount: 1,
groupsCount: 1,
itemsCount: 1,
+ userIdFromOrgUser: "userIdFromOrgUser" + userId1,
});
});
@@ -503,6 +509,7 @@ describe("MemberAccessReportService", () => {
collectionsCount: 2, // Distinct collections
groupsCount: 0,
itemsCount: 3, // Distinct ciphers
+ userIdFromOrgUser: "userIdFromOrgUser" + userId1,
});
});
diff --git a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/services/member-access-report.service.ts b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/services/member-access-report.service.ts
index 046ed070e93..e094c647861 100644
--- a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/services/member-access-report.service.ts
+++ b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/services/member-access-report.service.ts
@@ -50,6 +50,7 @@ interface OrganizationUserData {
twoFactorEnabled: boolean;
usesKeyConnector: boolean;
resetPasswordEnrolled: boolean;
+ userIdFromOrgUser: string | null; // userId from organization user endpoint (may be null for some users, e.g. pending invites)
}
interface MemberCipherAccess {
@@ -128,6 +129,7 @@ export class MemberAccessReportService {
groupsCount: groupCount,
itemsCount: itemsCount,
usesKeyConnector: userDataArray.some((data) => data.usesKeyConnector),
+ userIdFromOrgUser: "", // V1 API doesn't provide userId from OrgUser endpoint
};
memberAccessReportViewCollection.push(aggregatedData);
@@ -298,6 +300,7 @@ export class MemberAccessReportService {
twoFactorEnabled: orgUser.twoFactorEnabled || false,
usesKeyConnector: orgUser.usesKeyConnector || false,
resetPasswordEnrolled: orgUser.resetPasswordEnrolled || false,
+ userIdFromOrgUser: orgUser.userId || null,
});
}
@@ -531,6 +534,7 @@ export class MemberAccessReportService {
groupsCount: data.groups.size,
itemsCount: data.items.size,
usesKeyConnector: metadata.usesKeyConnector,
+ userIdFromOrgUser: metadata.userIdFromOrgUser,
});
}
diff --git a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/view/member-access-report.view.ts b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/view/member-access-report.view.ts
index d004f3dc720..36dec988b22 100644
--- a/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/view/member-access-report.view.ts
+++ b/bitwarden_license/bit-web/src/app/dirt/reports/member-access-report/view/member-access-report.view.ts
@@ -9,4 +9,5 @@ export type MemberAccessReportView = {
itemsCount: number;
userGuid: Guid;
usesKeyConnector: boolean;
+ userIdFromOrgUser: string | null; // maybe null and used for avatar
};