[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:
+13
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user