[permissions] Fix delete and soft-delete + enable fieldPermissions in devSeeds (#13646)

In this PR
1. Fix delete and soft-delete repository methods for repositories where
permission checks are NOT bypassed: they need to have a selection of
columns to return by default. To match what we did for insert I set it
to `'*'` by default. But I feel this may be bug prone as developers will
not necessarily think to fill the right values in. Maybe we should
change the api to use selectable fields by default. @charlesBochet
2. Add field permission seeds and enable field permission feature flag
in dev
This commit is contained in:
Marie
2025-08-07 10:43:28 +02:00
committed by GitHub
parent 9cfd62f1ef
commit 05c23a1297
10 changed files with 122 additions and 6 deletions
@@ -583,6 +583,7 @@ export class WorkspaceEntityManager extends EntityManager {
targetOrEntity: EntityTarget<Entity>,
criteria: unknown,
permissionOptions?: PermissionOptions,
selectedColumns: string[] | '*' = '*',
): Promise<DeleteResult> {
if (
criteria === undefined ||
@@ -611,6 +612,7 @@ export class WorkspaceEntityManager extends EntityManager {
.delete()
.from(targetOrEntity)
.whereInIds(criteria)
.returning(selectedColumns)
.execute();
} else {
return this.createQueryBuilder(
@@ -622,6 +624,7 @@ export class WorkspaceEntityManager extends EntityManager {
.delete()
.from(targetOrEntity)
.where(criteria)
.returning(selectedColumns)
.execute();
}
}
@@ -630,6 +633,7 @@ export class WorkspaceEntityManager extends EntityManager {
targetOrEntity: EntityTarget<Entity>,
criteria: unknown,
permissionOptions?: PermissionOptions,
selectedColumns: string[] | '*' = '*',
): Promise<UpdateResult> {
// if user passed empty criteria or empty list of criterias, then throw an error
if (
@@ -659,6 +663,7 @@ export class WorkspaceEntityManager extends EntityManager {
.softDelete()
.from(targetOrEntity)
.whereInIds(criteria)
.returning(selectedColumns)
.execute();
} else {
return this.createQueryBuilder(
@@ -670,6 +675,7 @@ export class WorkspaceEntityManager extends EntityManager {
.softDelete()
.from(targetOrEntity)
.where(criteria)
.returning(selectedColumns)
.execute();
}
}
@@ -678,6 +684,7 @@ export class WorkspaceEntityManager extends EntityManager {
targetOrEntity: EntityTarget<Entity>,
criteria: unknown,
permissionOptions?: PermissionOptions,
selectedColumns: string[] | '*' = '*',
): Promise<UpdateResult> {
// if user passed empty criteria or empty list of criterias, then throw an error
if (
@@ -707,6 +714,7 @@ export class WorkspaceEntityManager extends EntityManager {
.restore()
.from(targetOrEntity)
.whereInIds(criteria)
.returning(selectedColumns)
.execute();
} else {
return this.createQueryBuilder(
@@ -718,6 +726,7 @@ export class WorkspaceEntityManager extends EntityManager {
.restore()
.from(targetOrEntity)
.where(criteria)
.returning(selectedColumns)
.execute();
}
}
@@ -1237,6 +1246,10 @@ export class WorkspaceEntityManager extends EntityManager {
objectMetadataItem: ObjectMetadataItemWithFieldMaps;
permissionOptionsFromArgs: PermissionOptions | undefined;
}): Entity[] {
if (permissionOptionsFromArgs?.shouldBypassPermissionChecks === true) {
return formattedResult;
}
const restrictedFields =
permissionOptionsFromArgs?.objectRecordsPermissions?.[
objectMetadataItem.id