Skip to content

Commit bc2c444

Browse files
authored
Fix issue: tenant is defaulting incorrectly based on the ordering of: opensearch_security.multitenancy.tenants.preferred (#2163)
1 parent ded4012 commit bc2c444

File tree

2 files changed

+75
-1
lines changed

2 files changed

+75
-1
lines changed

server/multitenancy/tenant_resolver.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { GLOBAL_TENANT_SYMBOL, globalTenantName, PRIVATE_TENANT_SYMBOL } from '.
2323
import { ensureRawRequest } from '../../../../src/core/server/http/router';
2424
import { GOTO_PREFIX } from '../../../../src/plugins/share/common/short_url_routes';
2525

26-
export const PRIVATE_TENANTS: string[] = [PRIVATE_TENANT_SYMBOL, 'private'];
26+
export const PRIVATE_TENANTS: string[] = [PRIVATE_TENANT_SYMBOL, 'private', 'Private'];
2727
export const GLOBAL_TENANTS: string[] = ['global', GLOBAL_TENANT_SYMBOL, 'Global'];
2828
/**
2929
* Resovles the tenant the user is using.

server/multitenancy/test/tenant_resolver.test.ts

+74
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,77 @@ describe("Resolve tenants when multitenancy is enabled and both 'Global' and 'Pr
7373
expect(adminResult).toEqual('');
7474
});
7575
});
76+
77+
describe("Resolve tenants when multitenancy is enabled and both 'Global' and 'Private' tenants are enabled", () => {
78+
function resolveWithConfig(config: any) {
79+
return resolve(
80+
config.username,
81+
config.requestedTenant,
82+
config.preferredTenants,
83+
config.availableTenants,
84+
config.globalTenantEnabled,
85+
config.multitenancy_enabled,
86+
config.privateTenantEnabled
87+
);
88+
}
89+
90+
it('Resolve tenant when requested tenant is Private but preferred tenant is Global', () => {
91+
const nonadminConfig = {
92+
username: 'testuser',
93+
requestedTenant: 'Private',
94+
preferredTenants: ['Global', 'Private'],
95+
availableTenants: { global_tenant: true, testuser: true },
96+
globalTenantEnabled: true,
97+
multitenancy_enabled: true,
98+
privateTenantEnabled: true,
99+
};
100+
101+
const nonadminResult = resolveWithConfig(nonadminConfig);
102+
expect(nonadminResult).toEqual('__user__');
103+
});
104+
105+
it('Resolve tenant when requested tenant is Global but preferred tenant is Private', () => {
106+
const nonadminConfig = {
107+
username: 'testuser',
108+
requestedTenant: 'Global',
109+
preferredTenants: ['Private', 'Global'],
110+
availableTenants: { global_tenant: true, testuser: true },
111+
globalTenantEnabled: true,
112+
multitenancy_enabled: true,
113+
privateTenantEnabled: true,
114+
};
115+
116+
const nonadminResult = resolveWithConfig(nonadminConfig);
117+
expect(nonadminResult).toEqual('');
118+
});
119+
120+
it('Resolve tenant when requested tenant is undefined but preferred tenant is Private', () => {
121+
const nonadminConfig = {
122+
username: 'testuser',
123+
requestedTenant: undefined,
124+
preferredTenants: ['Private', 'Global'],
125+
availableTenants: { global_tenant: true, testuser: true },
126+
globalTenantEnabled: true,
127+
multitenancy_enabled: true,
128+
privateTenantEnabled: true,
129+
};
130+
131+
const nonadminResult = resolveWithConfig(nonadminConfig);
132+
expect(nonadminResult).toEqual('__user__');
133+
});
134+
135+
it('Resolve tenant when requested tenant is undefined but preferred tenant is Global', () => {
136+
const nonadminConfig = {
137+
username: 'testuser',
138+
requestedTenant: undefined,
139+
preferredTenants: ['Global', 'Private'],
140+
availableTenants: { global_tenant: true, testuser: true },
141+
globalTenantEnabled: true,
142+
multitenancy_enabled: true,
143+
privateTenantEnabled: true,
144+
};
145+
146+
const nonadminResult = resolveWithConfig(nonadminConfig);
147+
expect(nonadminResult).toEqual('');
148+
});
149+
});

0 commit comments

Comments
 (0)