mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-14 00:19:16 +01:00
fix: change import ui permission and refactor (#3144)
This commit is contained in:
parent
25ae05fea8
commit
61f8e6a8ef
@ -28,7 +28,7 @@ import ProjectOverview from './ProjectOverview';
|
|||||||
import ProjectHealth from './ProjectHealth/ProjectHealth';
|
import ProjectHealth from './ProjectHealth/ProjectHealth';
|
||||||
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
|
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
|
||||||
import {
|
import {
|
||||||
CREATE_FEATURE,
|
UPDATE_FEATURE,
|
||||||
DELETE_PROJECT,
|
DELETE_PROJECT,
|
||||||
UPDATE_PROJECT,
|
UPDATE_PROJECT,
|
||||||
} from 'component/providers/AccessProvider/permissions';
|
} from 'component/providers/AccessProvider/permissions';
|
||||||
@ -143,7 +143,7 @@ export const Project = () => {
|
|||||||
)}
|
)}
|
||||||
show={
|
show={
|
||||||
<PermissionIconButton
|
<PermissionIconButton
|
||||||
permission={CREATE_FEATURE}
|
permission={UPDATE_FEATURE}
|
||||||
projectId={projectId}
|
projectId={projectId}
|
||||||
onClick={() => setModalOpen(true)}
|
onClick={() => setModalOpen(true)}
|
||||||
tooltipProps={{ title: 'Import' }}
|
tooltipProps={{ title: 'Import' }}
|
||||||
|
@ -6,6 +6,7 @@ import dbInit, { ITestDb } from '../../test/e2e/helpers/database-init';
|
|||||||
import getLogger from '../../test/fixtures/no-logger';
|
import getLogger from '../../test/fixtures/no-logger';
|
||||||
import {
|
import {
|
||||||
DEFAULT_PROJECT,
|
DEFAULT_PROJECT,
|
||||||
|
IContextFieldStore,
|
||||||
IEnvironmentStore,
|
IEnvironmentStore,
|
||||||
IEventStore,
|
IEventStore,
|
||||||
IFeatureToggleStore,
|
IFeatureToggleStore,
|
||||||
@ -22,6 +23,7 @@ let app: IUnleashTest;
|
|||||||
let db: ITestDb;
|
let db: ITestDb;
|
||||||
let eventStore: IEventStore;
|
let eventStore: IEventStore;
|
||||||
let environmentStore: IEnvironmentStore;
|
let environmentStore: IEnvironmentStore;
|
||||||
|
let contextFieldStore: IContextFieldStore;
|
||||||
let projectStore: IProjectStore;
|
let projectStore: IProjectStore;
|
||||||
let toggleStore: IFeatureToggleStore;
|
let toggleStore: IFeatureToggleStore;
|
||||||
let accessService: AccessService;
|
let accessService: AccessService;
|
||||||
@ -242,6 +244,7 @@ beforeAll(async () => {
|
|||||||
projectStore = db.stores.projectStore;
|
projectStore = db.stores.projectStore;
|
||||||
toggleStore = db.stores.featureToggleStore;
|
toggleStore = db.stores.featureToggleStore;
|
||||||
accessService = app.services.accessService;
|
accessService = app.services.accessService;
|
||||||
|
contextFieldStore = db.stores.contextFieldStore;
|
||||||
|
|
||||||
const roles = await accessService.getRootRoles();
|
const roles = await accessService.getRootRoles();
|
||||||
adminRole = roles.find((role) => role.name === RoleName.ADMIN);
|
adminRole = roles.find((role) => role.name === RoleName.ADMIN);
|
||||||
@ -261,6 +264,11 @@ beforeEach(async () => {
|
|||||||
await toggleStore.deleteAll();
|
await toggleStore.deleteAll();
|
||||||
await projectStore.deleteAll();
|
await projectStore.deleteAll();
|
||||||
await environmentStore.deleteAll();
|
await environmentStore.deleteAll();
|
||||||
|
await contextFieldStore.deleteAll();
|
||||||
|
|
||||||
|
await contextFieldStore.deleteAll();
|
||||||
|
await loginAdminUser();
|
||||||
|
await createContextField({ name: 'appName' });
|
||||||
});
|
});
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
|
@ -576,24 +576,38 @@ export default class ExportImportService {
|
|||||||
dto: ImportTogglesSchema,
|
dto: ImportTogglesSchema,
|
||||||
user: User,
|
user: User,
|
||||||
): Promise<string[]> {
|
): Promise<string[]> {
|
||||||
const [newTagTypes, newContextFields] = await Promise.all([
|
const [
|
||||||
|
newTagTypes,
|
||||||
|
newContextFields,
|
||||||
|
strategiesExistForFeatures,
|
||||||
|
featureEnvsWithVariants,
|
||||||
|
existingFeatures,
|
||||||
|
] = await Promise.all([
|
||||||
this.getNewTagTypes(dto),
|
this.getNewTagTypes(dto),
|
||||||
this.getNewContextFields(dto),
|
this.getNewContextFields(dto),
|
||||||
|
this.importTogglesStore.strategiesExistForFeatures(
|
||||||
|
dto.data.features.map((feature) => feature.name),
|
||||||
|
dto.environment,
|
||||||
|
),
|
||||||
|
dto.data.featureEnvironments?.filter(
|
||||||
|
(featureEnvironment) =>
|
||||||
|
Array.isArray(featureEnvironment.variants) &&
|
||||||
|
featureEnvironment.variants.length > 0,
|
||||||
|
) || Promise.resolve([]),
|
||||||
|
this.importTogglesStore.getExistingFeatures(
|
||||||
|
dto.data.features.map((feature) => feature.name),
|
||||||
|
),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const permissions = [UPDATE_FEATURE];
|
const permissions = [UPDATE_FEATURE];
|
||||||
if (newTagTypes.length > 0) {
|
if (newTagTypes.length > 0) {
|
||||||
permissions.push(UPDATE_TAG_TYPE);
|
permissions.push(UPDATE_TAG_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Array.isArray(newContextFields) && newContextFields.length > 0) {
|
if (Array.isArray(newContextFields) && newContextFields.length > 0) {
|
||||||
permissions.push(CREATE_CONTEXT_FIELD);
|
permissions.push(CREATE_CONTEXT_FIELD);
|
||||||
}
|
}
|
||||||
|
|
||||||
const strategiesExistForFeatures =
|
|
||||||
await this.importTogglesStore.strategiesExistForFeatures(
|
|
||||||
dto.data.features.map((feature) => feature.name),
|
|
||||||
dto.environment,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (strategiesExistForFeatures) {
|
if (strategiesExistForFeatures) {
|
||||||
permissions.push(DELETE_FEATURE_STRATEGY);
|
permissions.push(DELETE_FEATURE_STRATEGY);
|
||||||
}
|
}
|
||||||
@ -602,22 +616,10 @@ export default class ExportImportService {
|
|||||||
permissions.push(CREATE_FEATURE_STRATEGY);
|
permissions.push(CREATE_FEATURE_STRATEGY);
|
||||||
}
|
}
|
||||||
|
|
||||||
const featureEnvsWithVariants =
|
|
||||||
dto.data.featureEnvironments?.filter(
|
|
||||||
(featureEnvironment) =>
|
|
||||||
Array.isArray(featureEnvironment.variants) &&
|
|
||||||
featureEnvironment.variants.length > 0,
|
|
||||||
) || [];
|
|
||||||
|
|
||||||
if (featureEnvsWithVariants.length > 0) {
|
if (featureEnvsWithVariants.length > 0) {
|
||||||
permissions.push(UPDATE_FEATURE_ENVIRONMENT_VARIANTS);
|
permissions.push(UPDATE_FEATURE_ENVIRONMENT_VARIANTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
const existingFeatures =
|
|
||||||
await this.importTogglesStore.getExistingFeatures(
|
|
||||||
dto.data.features.map((feature) => feature.name),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (existingFeatures.length < dto.data.features.length) {
|
if (existingFeatures.length < dto.data.features.length) {
|
||||||
permissions.push(CREATE_FEATURE);
|
permissions.push(CREATE_FEATURE);
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import getLogger from '../../test/fixtures/no-logger';
|
|||||||
import {
|
import {
|
||||||
DEFAULT_PROJECT,
|
DEFAULT_PROJECT,
|
||||||
FeatureToggleDTO,
|
FeatureToggleDTO,
|
||||||
|
IContextFieldStore,
|
||||||
IEnvironmentStore,
|
IEnvironmentStore,
|
||||||
IEventStore,
|
IEventStore,
|
||||||
IFeatureToggleStore,
|
IFeatureToggleStore,
|
||||||
@ -28,6 +29,7 @@ let app: IUnleashTest;
|
|||||||
let db: ITestDb;
|
let db: ITestDb;
|
||||||
let eventStore: IEventStore;
|
let eventStore: IEventStore;
|
||||||
let environmentStore: IEnvironmentStore;
|
let environmentStore: IEnvironmentStore;
|
||||||
|
let contextFieldStore: IContextFieldStore;
|
||||||
let projectStore: IProjectStore;
|
let projectStore: IProjectStore;
|
||||||
let toggleStore: IFeatureToggleStore;
|
let toggleStore: IFeatureToggleStore;
|
||||||
|
|
||||||
@ -170,6 +172,7 @@ beforeAll(async () => {
|
|||||||
eventStore = db.stores.eventStore;
|
eventStore = db.stores.eventStore;
|
||||||
environmentStore = db.stores.environmentStore;
|
environmentStore = db.stores.environmentStore;
|
||||||
projectStore = db.stores.projectStore;
|
projectStore = db.stores.projectStore;
|
||||||
|
contextFieldStore = db.stores.contextFieldStore;
|
||||||
toggleStore = db.stores.featureToggleStore;
|
toggleStore = db.stores.featureToggleStore;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -178,6 +181,9 @@ beforeEach(async () => {
|
|||||||
await toggleStore.deleteAll();
|
await toggleStore.deleteAll();
|
||||||
await projectStore.deleteAll();
|
await projectStore.deleteAll();
|
||||||
await environmentStore.deleteAll();
|
await environmentStore.deleteAll();
|
||||||
|
|
||||||
|
await contextFieldStore.deleteAll();
|
||||||
|
await createContextField({ name: 'appName' });
|
||||||
});
|
});
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
|
Loading…
Reference in New Issue
Block a user