1
0
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:
Jaanus Sellin 2023-02-17 16:01:32 +02:00 committed by GitHub
parent 25ae05fea8
commit 61f8e6a8ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 37 additions and 21 deletions

View File

@ -28,7 +28,7 @@ import ProjectOverview from './ProjectOverview';
import ProjectHealth from './ProjectHealth/ProjectHealth';
import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton';
import {
CREATE_FEATURE,
UPDATE_FEATURE,
DELETE_PROJECT,
UPDATE_PROJECT,
} from 'component/providers/AccessProvider/permissions';
@ -143,7 +143,7 @@ export const Project = () => {
)}
show={
<PermissionIconButton
permission={CREATE_FEATURE}
permission={UPDATE_FEATURE}
projectId={projectId}
onClick={() => setModalOpen(true)}
tooltipProps={{ title: 'Import' }}

View File

@ -6,6 +6,7 @@ import dbInit, { ITestDb } from '../../test/e2e/helpers/database-init';
import getLogger from '../../test/fixtures/no-logger';
import {
DEFAULT_PROJECT,
IContextFieldStore,
IEnvironmentStore,
IEventStore,
IFeatureToggleStore,
@ -22,6 +23,7 @@ let app: IUnleashTest;
let db: ITestDb;
let eventStore: IEventStore;
let environmentStore: IEnvironmentStore;
let contextFieldStore: IContextFieldStore;
let projectStore: IProjectStore;
let toggleStore: IFeatureToggleStore;
let accessService: AccessService;
@ -242,6 +244,7 @@ beforeAll(async () => {
projectStore = db.stores.projectStore;
toggleStore = db.stores.featureToggleStore;
accessService = app.services.accessService;
contextFieldStore = db.stores.contextFieldStore;
const roles = await accessService.getRootRoles();
adminRole = roles.find((role) => role.name === RoleName.ADMIN);
@ -261,6 +264,11 @@ beforeEach(async () => {
await toggleStore.deleteAll();
await projectStore.deleteAll();
await environmentStore.deleteAll();
await contextFieldStore.deleteAll();
await contextFieldStore.deleteAll();
await loginAdminUser();
await createContextField({ name: 'appName' });
});
afterAll(async () => {

View File

@ -576,24 +576,38 @@ export default class ExportImportService {
dto: ImportTogglesSchema,
user: User,
): Promise<string[]> {
const [newTagTypes, newContextFields] = await Promise.all([
const [
newTagTypes,
newContextFields,
strategiesExistForFeatures,
featureEnvsWithVariants,
existingFeatures,
] = await Promise.all([
this.getNewTagTypes(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];
if (newTagTypes.length > 0) {
permissions.push(UPDATE_TAG_TYPE);
}
if (Array.isArray(newContextFields) && newContextFields.length > 0) {
permissions.push(CREATE_CONTEXT_FIELD);
}
const strategiesExistForFeatures =
await this.importTogglesStore.strategiesExistForFeatures(
dto.data.features.map((feature) => feature.name),
dto.environment,
);
if (strategiesExistForFeatures) {
permissions.push(DELETE_FEATURE_STRATEGY);
}
@ -602,22 +616,10 @@ export default class ExportImportService {
permissions.push(CREATE_FEATURE_STRATEGY);
}
const featureEnvsWithVariants =
dto.data.featureEnvironments?.filter(
(featureEnvironment) =>
Array.isArray(featureEnvironment.variants) &&
featureEnvironment.variants.length > 0,
) || [];
if (featureEnvsWithVariants.length > 0) {
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) {
permissions.push(CREATE_FEATURE);
}

View File

@ -7,6 +7,7 @@ import getLogger from '../../test/fixtures/no-logger';
import {
DEFAULT_PROJECT,
FeatureToggleDTO,
IContextFieldStore,
IEnvironmentStore,
IEventStore,
IFeatureToggleStore,
@ -28,6 +29,7 @@ let app: IUnleashTest;
let db: ITestDb;
let eventStore: IEventStore;
let environmentStore: IEnvironmentStore;
let contextFieldStore: IContextFieldStore;
let projectStore: IProjectStore;
let toggleStore: IFeatureToggleStore;
@ -170,6 +172,7 @@ beforeAll(async () => {
eventStore = db.stores.eventStore;
environmentStore = db.stores.environmentStore;
projectStore = db.stores.projectStore;
contextFieldStore = db.stores.contextFieldStore;
toggleStore = db.stores.featureToggleStore;
});
@ -178,6 +181,9 @@ beforeEach(async () => {
await toggleStore.deleteAll();
await projectStore.deleteAll();
await environmentStore.deleteAll();
await contextFieldStore.deleteAll();
await createContextField({ name: 'appName' });
});
afterAll(async () => {