[permissions] Deprecate ObjectsPermissionsDeprecated (1/3) (#14306)

We want to update UserWorkspacePermissions from 
```
export type UserWorkspacePermissions = {
  permissionFlags: Record<PermissionFlagType, boolean>;
  objectRecordsPermissions: Record<PermissionsOnAllObjectRecords, boolean>;
  objectPermissions: ObjectsPermissionsDeprecated;
};
```

to
```
export type UserWorkspacePermissions = {
  permissionFlags: Record<PermissionFlagType, boolean>;
  objectsPermissions: ObjectsPermissions;
};
```

`ObjectsPermissionsDeprecated` and `ObjectsPermissions` are actually
very similar, they only have different key names (`canRead` vs
`canReadObjectRecords`)

To avoid brutal breaking changes, we will proceed in multiple steps: 

1. This PR: adapt FE so it does not call objectRecordsPermissions
anymore + add the new objectsPermissions to UserWorkspacePermissions
without calling it yet in the FE
2. Remove objectRecordsPermissions in BE + use objectsPermissions in FE
instead of objectPermissions
3. Remove objectPermissions
This commit is contained in:
Marie
2025-09-04 16:03:33 +02:00
committed by GitHub
parent 5c1ce8476d
commit 40251d34ec
12 changed files with 60 additions and 33 deletions
@@ -60,6 +60,10 @@ describe('FieldPermissionService', () => {
canUpdate: true,
canSoftDelete: false,
canDestroy: false,
canReadObjectRecords: true,
canUpdateObjectRecords: true,
canSoftDeleteObjectRecords: false,
canDestroyObjectRecords: false,
restrictedFields: {},
},
[fieldRelationMock.objectMetadataId]: {
@@ -67,6 +71,10 @@ describe('FieldPermissionService', () => {
canUpdate: true,
canSoftDelete: false,
canDestroy: false,
canReadObjectRecords: true,
canUpdateObjectRecords: true,
canSoftDeleteObjectRecords: false,
canDestroyObjectRecords: false,
restrictedFields: {},
},
},
@@ -86,6 +86,7 @@ export class PermissionsService {
});
const objectPermissions = rolesPermissions[roleOfUserWorkspace.id] ?? {};
const objectsPermissions = rolesPermissions[roleOfUserWorkspace.id] ?? {};
const objectRecordsPermissions: UserWorkspacePermissions['objectRecordsPermissions'] =
{
@@ -103,6 +104,7 @@ export class PermissionsService {
permissionFlags,
objectRecordsPermissions,
objectPermissions,
objectsPermissions,
};
}
@@ -128,6 +130,7 @@ export class PermissionsService {
[PermissionFlagType.EXPORT_CSV]: false,
},
objectPermissions: {},
objectsPermissions: {},
}) as const satisfies UserWorkspacePermissions;
public async userHasWorkspaceSettingPermission({
@@ -1,5 +1,8 @@
import { type PermissionsOnAllObjectRecords } from 'twenty-shared/constants';
import { type ObjectsPermissionsDeprecated } from 'twenty-shared/types';
import {
type ObjectsPermissions,
type ObjectsPermissionsDeprecated,
} from 'twenty-shared/types';
import { type PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants';
@@ -7,4 +10,5 @@ export type UserWorkspacePermissions = {
permissionFlags: Record<PermissionFlagType, boolean>;
objectRecordsPermissions: Record<PermissionsOnAllObjectRecords, boolean>;
objectPermissions: ObjectsPermissionsDeprecated;
objectsPermissions: ObjectsPermissions; // replaces ObjectsPermissionsDeprecated - deprecation ongoing
};
@@ -2,6 +2,7 @@ import { Injectable, Logger } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import {
ObjectsPermissions,
type ObjectsPermissionsByRoleIdDeprecated,
type ObjectsPermissionsDeprecated,
type RestrictedFieldsPermissions,
@@ -190,7 +191,8 @@ export class WorkspacePermissionsCacheService {
const permissionsByRoleId: ObjectsPermissionsByRoleIdDeprecated = {};
for (const role of roles) {
const objectRecordsPermissions: ObjectsPermissionsDeprecated = {};
const objectRecordsPermissions: ObjectsPermissionsDeprecated &
ObjectsPermissions = {};
for (const objectMetadata of workspaceObjectMetadataCollection) {
const { id: objectMetadataId, isSystem, standardId } = objectMetadata;
@@ -270,6 +272,10 @@ export class WorkspacePermissionsCacheService {
canUpdate,
canSoftDelete,
canDestroy,
canReadObjectRecords: canRead,
canUpdateObjectRecords: canUpdate,
canSoftDeleteObjectRecords: canSoftDelete,
canDestroyObjectRecords: canDestroy,
restrictedFields,
};