mirror of
https://github.com/bitwarden/browser
synced 2025-12-12 14:23:32 +00:00
[PM-21122] - Hide orgs in product switcher for single org policy users (#14803)
* don't display orgs in account switcher for single org policy users * add comment * add test case * fix storybook * fix storybook again * use variable name instead of comment
This commit is contained in:
@@ -5,6 +5,7 @@ import { BehaviorSubject, firstValueFrom, Observable, of } from "rxjs";
|
|||||||
|
|
||||||
import { I18nPipe } from "@bitwarden/angular/platform/pipes/i18n.pipe";
|
import { I18nPipe } from "@bitwarden/angular/platform/pipes/i18n.pipe";
|
||||||
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
|
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
|
||||||
|
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
|
||||||
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
|
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
|
||||||
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
||||||
import { Provider } from "@bitwarden/common/admin-console/models/domain/provider";
|
import { Provider } from "@bitwarden/common/admin-console/models/domain/provider";
|
||||||
@@ -130,6 +131,12 @@ export default {
|
|||||||
return new I18nMockService(translations);
|
return new I18nMockService(translations);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
provide: PolicyService,
|
||||||
|
useValue: {
|
||||||
|
policyAppliesToUser$: () => of(false),
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
}),
|
}),
|
||||||
applicationConfig({
|
applicationConfig({
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { BehaviorSubject, firstValueFrom, Observable, of } from "rxjs";
|
|||||||
|
|
||||||
import { JslibModule } from "@bitwarden/angular/jslib.module";
|
import { JslibModule } from "@bitwarden/angular/jslib.module";
|
||||||
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
|
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
|
||||||
|
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
|
||||||
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
|
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
|
||||||
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
||||||
import { Provider } from "@bitwarden/common/admin-console/models/domain/provider";
|
import { Provider } from "@bitwarden/common/admin-console/models/domain/provider";
|
||||||
@@ -126,6 +127,12 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
provide: PolicyService,
|
||||||
|
useValue: {
|
||||||
|
policyAppliesToUser$: () => of(false),
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
}),
|
}),
|
||||||
applicationConfig({
|
applicationConfig({
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { Observable, firstValueFrom, of } from "rxjs";
|
|||||||
|
|
||||||
import { I18nPipe } from "@bitwarden/angular/platform/pipes/i18n.pipe";
|
import { I18nPipe } from "@bitwarden/angular/platform/pipes/i18n.pipe";
|
||||||
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
|
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
|
||||||
|
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
|
||||||
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
|
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
|
||||||
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
||||||
import { Provider } from "@bitwarden/common/admin-console/models/domain/provider";
|
import { Provider } from "@bitwarden/common/admin-console/models/domain/provider";
|
||||||
@@ -27,6 +28,7 @@ describe("ProductSwitcherService", () => {
|
|||||||
let accountService: FakeAccountService;
|
let accountService: FakeAccountService;
|
||||||
let platformUtilsService: MockProxy<PlatformUtilsService>;
|
let platformUtilsService: MockProxy<PlatformUtilsService>;
|
||||||
let activeRouteParams = convertToParamMap({ organizationId: "1234" });
|
let activeRouteParams = convertToParamMap({ organizationId: "1234" });
|
||||||
|
let singleOrgPolicyEnabled = false;
|
||||||
const getLastSync = jest.fn().mockResolvedValue(new Date("2024-05-14"));
|
const getLastSync = jest.fn().mockResolvedValue(new Date("2024-05-14"));
|
||||||
const userId = Utils.newGuid() as UserId;
|
const userId = Utils.newGuid() as UserId;
|
||||||
|
|
||||||
@@ -77,6 +79,12 @@ describe("ProductSwitcherService", () => {
|
|||||||
provide: SyncService,
|
provide: SyncService,
|
||||||
useValue: { getLastSync },
|
useValue: { getLastSync },
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
provide: PolicyService,
|
||||||
|
useValue: {
|
||||||
|
policyAppliesToUser$: () => of(singleOrgPolicyEnabled),
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -184,6 +192,14 @@ describe("ProductSwitcherService", () => {
|
|||||||
expect(products.bento.find((p) => p.name === "Admin Console")).toBeDefined();
|
expect(products.bento.find((p) => p.name === "Admin Console")).toBeDefined();
|
||||||
expect(products.other.find((p) => p.name === "Organizations")).toBeUndefined();
|
expect(products.other.find((p) => p.name === "Organizations")).toBeUndefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("does not include Organizations when the user's single org policy is enabled", async () => {
|
||||||
|
singleOrgPolicyEnabled = true;
|
||||||
|
initiateService();
|
||||||
|
const products = await firstValueFrom(service.products$);
|
||||||
|
|
||||||
|
expect(products.other.find((p) => p.name === "Organizations")).not.toBeDefined();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("Provider Portal", () => {
|
describe("Provider Portal", () => {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
combineLatest,
|
combineLatest,
|
||||||
concatMap,
|
concatMap,
|
||||||
filter,
|
filter,
|
||||||
|
firstValueFrom,
|
||||||
map,
|
map,
|
||||||
Observable,
|
Observable,
|
||||||
ReplaySubject,
|
ReplaySubject,
|
||||||
@@ -18,10 +19,12 @@ import {
|
|||||||
canAccessOrgAdmin,
|
canAccessOrgAdmin,
|
||||||
OrganizationService,
|
OrganizationService,
|
||||||
} from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
|
} from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
|
||||||
|
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
|
||||||
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
|
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
|
||||||
import { ProviderType } from "@bitwarden/common/admin-console/enums";
|
import { PolicyType, ProviderType } from "@bitwarden/common/admin-console/enums";
|
||||||
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
||||||
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
|
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
|
||||||
|
import { getUserId } from "@bitwarden/common/auth/services/account.service";
|
||||||
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
||||||
import { SyncService } from "@bitwarden/common/platform/sync";
|
import { SyncService } from "@bitwarden/common/platform/sync";
|
||||||
|
|
||||||
@@ -104,6 +107,7 @@ export class ProductSwitcherService {
|
|||||||
private syncService: SyncService,
|
private syncService: SyncService,
|
||||||
private accountService: AccountService,
|
private accountService: AccountService,
|
||||||
private platformUtilsService: PlatformUtilsService,
|
private platformUtilsService: PlatformUtilsService,
|
||||||
|
private policyService: PolicyService,
|
||||||
) {
|
) {
|
||||||
this.pollUntilSynced();
|
this.pollUntilSynced();
|
||||||
}
|
}
|
||||||
@@ -235,7 +239,15 @@ export class ProductSwitcherService {
|
|||||||
if (acOrg) {
|
if (acOrg) {
|
||||||
bento.push(products.ac);
|
bento.push(products.ac);
|
||||||
} else {
|
} else {
|
||||||
other.push(products.orgs);
|
const activeUserId = await firstValueFrom(
|
||||||
|
this.accountService.activeAccount$.pipe(getUserId),
|
||||||
|
);
|
||||||
|
const userHasSingleOrgPolicy = await firstValueFrom(
|
||||||
|
this.policyService.policyAppliesToUser$(PolicyType.SingleOrg, activeUserId),
|
||||||
|
);
|
||||||
|
if (!userHasSingleOrgPolicy) {
|
||||||
|
other.push(products.orgs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (providers.length > 0) {
|
if (providers.length > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user