Refactor rls backend simplify add tests (#17357)
## Context Removing full CRUD to RLS since we are actually using an upsert only over the role resolver, this removes a lot of unused code (could be re-added later but unlikely). Simplified the folder arch at the same time Add simple integration tests to RLS
This commit is contained in:
+9
@@ -0,0 +1,9 @@
|
||||
/* @license Enterprise */
|
||||
|
||||
import { type FlatRowLevelPermissionPredicateGroup } from 'src/engine/metadata-modules/row-level-permission-predicate/types/flat-row-level-permission-predicate-group.type';
|
||||
|
||||
export const FLAT_ROW_LEVEL_PERMISSION_PREDICATE_GROUP_EDITABLE_PROPERTIES = [
|
||||
'logicalOperator',
|
||||
'positionInRowLevelPermissionPredicateGroup',
|
||||
'parentRowLevelPermissionPredicateGroupId',
|
||||
] as const satisfies (keyof FlatRowLevelPermissionPredicateGroup)[];
|
||||
-74
@@ -1,74 +0,0 @@
|
||||
/* @license Enterprise */
|
||||
|
||||
import { trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties } from 'twenty-shared/utils';
|
||||
import { v4 } from 'uuid';
|
||||
|
||||
import { type CreateRowLevelPermissionPredicateInput } from 'src/engine/metadata-modules/row-level-permission-predicate/dtos/inputs/create-row-level-permission-predicate.input';
|
||||
import { type FlatRowLevelPermissionPredicate } from 'src/engine/metadata-modules/row-level-permission-predicate/types/flat-row-level-permission-predicate.type';
|
||||
|
||||
export const fromCreateRowLevelPermissionPredicateInputToFlatRowLevelPermissionPredicateToCreate =
|
||||
({
|
||||
createRowLevelPermissionPredicateInput:
|
||||
rawCreateRowLevelPermissionPredicateInput,
|
||||
workspaceId,
|
||||
workspaceCustomApplicationId,
|
||||
}: {
|
||||
createRowLevelPermissionPredicateInput: CreateRowLevelPermissionPredicateInput;
|
||||
workspaceId: string;
|
||||
workspaceCustomApplicationId: string;
|
||||
}): FlatRowLevelPermissionPredicate => {
|
||||
const sanitizedInput = (
|
||||
trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties as unknown as (
|
||||
input: CreateRowLevelPermissionPredicateInput,
|
||||
keys: string[],
|
||||
) => CreateRowLevelPermissionPredicateInput
|
||||
)(rawCreateRowLevelPermissionPredicateInput, [
|
||||
'fieldMetadataId',
|
||||
'objectMetadataId',
|
||||
'roleId',
|
||||
'rowLevelPermissionPredicateGroupId',
|
||||
'workspaceMemberFieldMetadataId',
|
||||
'subFieldName',
|
||||
'workspaceMemberSubFieldName',
|
||||
'operand',
|
||||
]);
|
||||
|
||||
const {
|
||||
fieldMetadataId,
|
||||
objectMetadataId,
|
||||
roleId,
|
||||
value,
|
||||
...createRowLevelPermissionPredicateInput
|
||||
} = sanitizedInput;
|
||||
|
||||
const createdAt = new Date().toISOString();
|
||||
const predicateId = v4();
|
||||
|
||||
return {
|
||||
id: predicateId,
|
||||
fieldMetadataId,
|
||||
objectMetadataId,
|
||||
roleId,
|
||||
workspaceId,
|
||||
createdAt,
|
||||
updatedAt: createdAt,
|
||||
deletedAt: null,
|
||||
universalIdentifier: predicateId,
|
||||
operand: createRowLevelPermissionPredicateInput.operand,
|
||||
value: value,
|
||||
rowLevelPermissionPredicateGroupId:
|
||||
createRowLevelPermissionPredicateInput.rowLevelPermissionPredicateGroupId ??
|
||||
null,
|
||||
positionInRowLevelPermissionPredicateGroup:
|
||||
createRowLevelPermissionPredicateInput.positionInRowLevelPermissionPredicateGroup ??
|
||||
null,
|
||||
subFieldName: createRowLevelPermissionPredicateInput.subFieldName ?? null,
|
||||
workspaceMemberFieldMetadataId:
|
||||
createRowLevelPermissionPredicateInput.workspaceMemberFieldMetadataId ??
|
||||
null,
|
||||
workspaceMemberSubFieldName:
|
||||
createRowLevelPermissionPredicateInput.workspaceMemberSubFieldName ??
|
||||
null,
|
||||
applicationId: workspaceCustomApplicationId,
|
||||
};
|
||||
};
|
||||
-45
@@ -1,45 +0,0 @@
|
||||
/* @license Enterprise */
|
||||
|
||||
import { t } from '@lingui/core/macro';
|
||||
import {
|
||||
extractAndSanitizeObjectStringFields,
|
||||
isDefined,
|
||||
} from 'twenty-shared/utils';
|
||||
|
||||
import { type DeleteRowLevelPermissionPredicateInput } from 'src/engine/metadata-modules/row-level-permission-predicate/dtos/inputs/delete-row-level-permission-predicate.input';
|
||||
import {
|
||||
RowLevelPermissionPredicateException,
|
||||
RowLevelPermissionPredicateExceptionCode,
|
||||
} from 'src/engine/metadata-modules/row-level-permission-predicate/exceptions/row-level-permission-predicate.exception';
|
||||
import { type FlatRowLevelPermissionPredicateMaps } from 'src/engine/metadata-modules/row-level-permission-predicate/types/flat-row-level-permission-predicate-maps.type';
|
||||
import { type FlatRowLevelPermissionPredicate } from 'src/engine/metadata-modules/row-level-permission-predicate/types/flat-row-level-permission-predicate.type';
|
||||
|
||||
export const fromDeleteRowLevelPermissionPredicateInputToFlatRowLevelPermissionPredicateOrThrow =
|
||||
({
|
||||
deleteRowLevelPermissionPredicateInput:
|
||||
rawDeleteRowLevelPermissionPredicateInput,
|
||||
flatRowLevelPermissionPredicateMaps,
|
||||
}: {
|
||||
deleteRowLevelPermissionPredicateInput: DeleteRowLevelPermissionPredicateInput;
|
||||
flatRowLevelPermissionPredicateMaps: FlatRowLevelPermissionPredicateMaps;
|
||||
}): FlatRowLevelPermissionPredicate => {
|
||||
const { id: predicateId } = extractAndSanitizeObjectStringFields(
|
||||
rawDeleteRowLevelPermissionPredicateInput,
|
||||
['id'],
|
||||
);
|
||||
|
||||
const existingFlatPredicate =
|
||||
flatRowLevelPermissionPredicateMaps.byId[predicateId];
|
||||
|
||||
if (!isDefined(existingFlatPredicate)) {
|
||||
throw new RowLevelPermissionPredicateException(
|
||||
t`Row level permission predicate to delete not found`,
|
||||
RowLevelPermissionPredicateExceptionCode.ROW_LEVEL_PERMISSION_PREDICATE_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
...existingFlatPredicate,
|
||||
deletedAt: new Date().toISOString(),
|
||||
};
|
||||
};
|
||||
-42
@@ -1,42 +0,0 @@
|
||||
/* @license Enterprise */
|
||||
|
||||
import { t } from '@lingui/core/macro';
|
||||
import {
|
||||
extractAndSanitizeObjectStringFields,
|
||||
isDefined,
|
||||
} from 'twenty-shared/utils';
|
||||
|
||||
import { type DestroyRowLevelPermissionPredicateInput } from 'src/engine/metadata-modules/row-level-permission-predicate/dtos/inputs/destroy-row-level-permission-predicate.input';
|
||||
import {
|
||||
RowLevelPermissionPredicateException,
|
||||
RowLevelPermissionPredicateExceptionCode,
|
||||
} from 'src/engine/metadata-modules/row-level-permission-predicate/exceptions/row-level-permission-predicate.exception';
|
||||
import { type FlatRowLevelPermissionPredicateMaps } from 'src/engine/metadata-modules/row-level-permission-predicate/types/flat-row-level-permission-predicate-maps.type';
|
||||
import { type FlatRowLevelPermissionPredicate } from 'src/engine/metadata-modules/row-level-permission-predicate/types/flat-row-level-permission-predicate.type';
|
||||
|
||||
export const fromDestroyRowLevelPermissionPredicateInputToFlatRowLevelPermissionPredicateOrThrow =
|
||||
({
|
||||
destroyRowLevelPermissionPredicateInput:
|
||||
rawDestroyRowLevelPermissionPredicateInput,
|
||||
flatRowLevelPermissionPredicateMaps,
|
||||
}: {
|
||||
destroyRowLevelPermissionPredicateInput: DestroyRowLevelPermissionPredicateInput;
|
||||
flatRowLevelPermissionPredicateMaps: FlatRowLevelPermissionPredicateMaps;
|
||||
}): FlatRowLevelPermissionPredicate => {
|
||||
const { id: predicateId } = extractAndSanitizeObjectStringFields(
|
||||
rawDestroyRowLevelPermissionPredicateInput,
|
||||
['id'],
|
||||
);
|
||||
|
||||
const existingFlatPredicate =
|
||||
flatRowLevelPermissionPredicateMaps.byId[predicateId];
|
||||
|
||||
if (!isDefined(existingFlatPredicate)) {
|
||||
throw new RowLevelPermissionPredicateException(
|
||||
t`Row level permission predicate to destroy not found`,
|
||||
RowLevelPermissionPredicateExceptionCode.ROW_LEVEL_PERMISSION_PREDICATE_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
return existingFlatPredicate;
|
||||
};
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
/* @license Enterprise */
|
||||
|
||||
import { type RowLevelPermissionPredicateGroupDTO } from 'src/engine/metadata-modules/row-level-permission-predicate/dtos/row-level-permission-predicate-group.dto';
|
||||
import { type FlatRowLevelPermissionPredicateGroup } from 'src/engine/metadata-modules/row-level-permission-predicate/types/flat-row-level-permission-predicate-group.type';
|
||||
|
||||
export const fromFlatRowLevelPermissionPredicateGroupToDto = (
|
||||
flatGroup: FlatRowLevelPermissionPredicateGroup,
|
||||
): RowLevelPermissionPredicateGroupDTO => ({
|
||||
...flatGroup,
|
||||
});
|
||||
-55
@@ -1,55 +0,0 @@
|
||||
/* @license Enterprise */
|
||||
|
||||
import { t } from '@lingui/core/macro';
|
||||
import {
|
||||
extractAndSanitizeObjectStringFields,
|
||||
isDefined,
|
||||
trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties,
|
||||
} from 'twenty-shared/utils';
|
||||
|
||||
import { FLAT_ROW_LEVEL_PERMISSION_PREDICATE_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-row-level-permission-predicate/constants/flat-row-level-permission-predicate-editable-properties.constant';
|
||||
import { type UpdateRowLevelPermissionPredicateInput } from 'src/engine/metadata-modules/row-level-permission-predicate/dtos/inputs/update-row-level-permission-predicate.input';
|
||||
import {
|
||||
RowLevelPermissionPredicateException,
|
||||
RowLevelPermissionPredicateExceptionCode,
|
||||
} from 'src/engine/metadata-modules/row-level-permission-predicate/exceptions/row-level-permission-predicate.exception';
|
||||
import { type FlatRowLevelPermissionPredicateMaps } from 'src/engine/metadata-modules/row-level-permission-predicate/types/flat-row-level-permission-predicate-maps.type';
|
||||
import { type FlatRowLevelPermissionPredicate } from 'src/engine/metadata-modules/row-level-permission-predicate/types/flat-row-level-permission-predicate.type';
|
||||
import { mergeUpdateInExistingRecord } from 'src/utils/merge-update-in-existing-record.util';
|
||||
|
||||
export const fromUpdateRowLevelPermissionPredicateInputToFlatRowLevelPermissionPredicateToUpdateOrThrow =
|
||||
({
|
||||
updateRowLevelPermissionPredicateInput:
|
||||
rawUpdateRowLevelPermissionPredicateInput,
|
||||
flatRowLevelPermissionPredicateMaps,
|
||||
}: {
|
||||
updateRowLevelPermissionPredicateInput: UpdateRowLevelPermissionPredicateInput;
|
||||
flatRowLevelPermissionPredicateMaps: FlatRowLevelPermissionPredicateMaps;
|
||||
}): FlatRowLevelPermissionPredicate => {
|
||||
const { id: predicateId } =
|
||||
trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties(
|
||||
rawUpdateRowLevelPermissionPredicateInput,
|
||||
['id'],
|
||||
);
|
||||
|
||||
const existingFlatPredicate =
|
||||
flatRowLevelPermissionPredicateMaps.byId[predicateId];
|
||||
|
||||
if (!isDefined(existingFlatPredicate)) {
|
||||
throw new RowLevelPermissionPredicateException(
|
||||
t`Row level permission predicate to update not found`,
|
||||
RowLevelPermissionPredicateExceptionCode.ROW_LEVEL_PERMISSION_PREDICATE_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
const sanitizedUpdate = extractAndSanitizeObjectStringFields(
|
||||
rawUpdateRowLevelPermissionPredicateInput,
|
||||
FLAT_ROW_LEVEL_PERMISSION_PREDICATE_EDITABLE_PROPERTIES,
|
||||
);
|
||||
|
||||
return mergeUpdateInExistingRecord({
|
||||
existing: existingFlatPredicate,
|
||||
properties: FLAT_ROW_LEVEL_PERMISSION_PREDICATE_EDITABLE_PROPERTIES,
|
||||
update: sanitizedUpdate,
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user