mirror of
https://github.com/Unleash/unleash.git
synced 2025-07-02 01:17:58 +02:00
chore: only return change request data if the unleash instance is an enterprise instance (#5331)
Otherwise, we might accidentally display CR data to open source users. But more importantly, it might keep them from being able to delete a segment that's in use by a CR in their database that they can't touch. So by checking that they're on an enterprise instance, we avoid this potential blocker. I've added the `includeChangeRequestUsageData` parameter as a boolean now, but I'm open to other suggestions.
This commit is contained in:
parent
68558fc774
commit
dc1aaf6d99
@ -49,7 +49,7 @@ describe('usage counting', () => {
|
|||||||
await db.rawDatabase.table('change_requests').delete();
|
await db.rawDatabase.table('change_requests').delete();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('segment usage in active CRs is also counted', async () => {
|
test('segment usage in active CRs is counted iff we ask for it', async () => {
|
||||||
const CR_ID = 54321;
|
const CR_ID = 54321;
|
||||||
|
|
||||||
const flag1 = await db.stores.featureToggleStore.create('default', {
|
const flag1 = await db.stores.featureToggleStore.create('default', {
|
||||||
@ -123,10 +123,15 @@ describe('usage counting', () => {
|
|||||||
created_by: user.id,
|
created_by: user.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const [storedSegment] = await segmentStore.getAll();
|
const [enterpriseData] = await segmentStore.getAll(true);
|
||||||
|
|
||||||
expect(storedSegment.usedInFeatures).toBe(2);
|
expect(enterpriseData.usedInFeatures).toBe(2);
|
||||||
expect(storedSegment.usedInProjects).toBe(1);
|
expect(enterpriseData.usedInProjects).toBe(1);
|
||||||
|
|
||||||
|
const [ossData] = await segmentStore.getAll(false);
|
||||||
|
|
||||||
|
expect(ossData.usedInFeatures).toBe(0);
|
||||||
|
expect(ossData.usedInProjects).toBe(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Segment usage is only counted once per feature', async () => {
|
test('Segment usage is only counted once per feature', async () => {
|
||||||
@ -204,7 +209,7 @@ describe('usage counting', () => {
|
|||||||
created_by: user.id,
|
created_by: user.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const storedSegments = await segmentStore.getAll();
|
const storedSegments = await segmentStore.getAll(true);
|
||||||
|
|
||||||
expect(storedSegments).toMatchObject([
|
expect(storedSegments).toMatchObject([
|
||||||
{ usedInFeatures: 1, usedInProjects: 1 },
|
{ usedInFeatures: 1, usedInProjects: 1 },
|
||||||
|
@ -111,8 +111,13 @@ export default class SegmentStore implements ISegmentStore {
|
|||||||
return this.db(T.segments).where({ id }).del();
|
return this.db(T.segments).where({ id }).del();
|
||||||
}
|
}
|
||||||
|
|
||||||
async getAll(): Promise<ISegment[]> {
|
async getAll(
|
||||||
if (this.flagResolver.isEnabled('detectSegmentUsageInChangeRequests')) {
|
includeChangeRequestUsageData: boolean = false,
|
||||||
|
): Promise<ISegment[]> {
|
||||||
|
if (
|
||||||
|
includeChangeRequestUsageData &&
|
||||||
|
this.flagResolver.isEnabled('detectSegmentUsageInChangeRequests')
|
||||||
|
) {
|
||||||
const pendingCRs = await this.db
|
const pendingCRs = await this.db
|
||||||
.select('id', 'project')
|
.select('id', 'project')
|
||||||
.from('change_requests')
|
.from('change_requests')
|
||||||
|
@ -75,7 +75,7 @@ export class SegmentService implements ISegmentService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getAll(): Promise<ISegment[]> {
|
async getAll(): Promise<ISegment[]> {
|
||||||
return this.segmentStore.getAll();
|
return this.segmentStore.getAll(this.config.isEnterprise);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getActive(): Promise<ISegment[]> {
|
async getActive(): Promise<ISegment[]> {
|
||||||
|
@ -3,7 +3,7 @@ import { Store } from './store';
|
|||||||
import User from '../user';
|
import User from '../user';
|
||||||
|
|
||||||
export interface ISegmentStore extends Store<ISegment, number> {
|
export interface ISegmentStore extends Store<ISegment, number> {
|
||||||
getAll(): Promise<ISegment[]>;
|
getAll(includeChangeRequestUsageData?: boolean): Promise<ISegment[]>;
|
||||||
|
|
||||||
getActive(): Promise<ISegment[]>;
|
getActive(): Promise<ISegment[]>;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user