Spaces:
Build error
Build error
File size: 2,687 Bytes
d9494a5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | import {
type ObjectsPermissions,
type RestrictedFieldPermissions,
} from 'twenty-shared/types';
export const computePermissionIntersection = (
permissionsArray: ObjectsPermissions[],
): ObjectsPermissions => {
if (permissionsArray.length === 0) {
return {};
}
if (permissionsArray.length === 1) {
return permissionsArray[0];
}
const result: ObjectsPermissions = {};
const allObjectMetadataIds = new Set<string>();
for (const permissions of permissionsArray) {
for (const id of Object.keys(permissions)) {
allObjectMetadataIds.add(id);
}
}
for (const objectMetadataId of allObjectMetadataIds) {
let canReadObjectRecords = true;
let canUpdateObjectRecords = true;
let canSoftDeleteObjectRecords = true;
let canDestroyObjectRecords = true;
const restrictedFields: Record<string, RestrictedFieldPermissions> = {};
for (const permissions of permissionsArray) {
const objPerm = permissions[objectMetadataId];
if (!objPerm) {
canReadObjectRecords = false;
canUpdateObjectRecords = false;
canSoftDeleteObjectRecords = false;
canDestroyObjectRecords = false;
continue;
}
canReadObjectRecords =
canReadObjectRecords && objPerm.canReadObjectRecords === true;
canUpdateObjectRecords =
canUpdateObjectRecords && objPerm.canUpdateObjectRecords === true;
canSoftDeleteObjectRecords =
canSoftDeleteObjectRecords &&
objPerm.canSoftDeleteObjectRecords === true;
canDestroyObjectRecords =
canDestroyObjectRecords && objPerm.canDestroyObjectRecords === true;
if (objPerm.restrictedFields) {
for (const [fieldName, fieldPerm] of Object.entries(
objPerm.restrictedFields,
)) {
if (!restrictedFields[fieldName]) {
restrictedFields[fieldName] = {
canRead: null,
canUpdate: null,
};
}
const current = restrictedFields[fieldName];
restrictedFields[fieldName] = {
canRead:
current.canRead === false || fieldPerm.canRead === false
? false
: null,
canUpdate:
current.canUpdate === false || fieldPerm.canUpdate === false
? false
: null,
};
}
}
}
result[objectMetadataId] = {
canReadObjectRecords,
canUpdateObjectRecords,
canSoftDeleteObjectRecords,
canDestroyObjectRecords,
restrictedFields,
rowLevelPermissionPredicates: [],
rowLevelPermissionPredicateGroups: [],
};
}
return result;
};
|