Parse filter structure on validation step

Fixes #4446
This commit is contained in:
rijkvanzanten
2021-03-11 18:25:14 -05:00
parent 1bee0c9ea9
commit f3683c9cf7
3 changed files with 7 additions and 6 deletions

View File

@@ -17,6 +17,7 @@ router.post(
accountability: req.accountability,
schema: req.schema,
});
const primaryKey = await service.create(req.body);
try {

View File

@@ -11,6 +11,7 @@ import {
Item,
PrimaryKey,
SchemaOverview,
Filter,
} from '../types';
import { Knex } from 'knex';
import { ForbiddenException, FailedValidationException } from '../exceptions';
@@ -268,7 +269,7 @@ export class AuthorizationService {
}
}
validationErrors.push(...this.validateJoi(permission.validation, payloads));
validationErrors.push(...this.validateJoi(parseFilter(permission.validation || {}, this.accountability), payloads));
if (validationErrors.length > 0) throw validationErrors;
@@ -279,10 +280,7 @@ export class AuthorizationService {
}
}
validateJoi(
validation: null | Record<string, any>,
payloads: Partial<Record<string, any>>[]
): FailedValidationException[] {
validateJoi(validation: Filter, payloads: Partial<Record<string, any>>[]): FailedValidationException[] {
if (!validation) return [];
const errors: FailedValidationException[] = [];

View File

@@ -1,3 +1,5 @@
import { Filter } from './query';
export type PermissionsAction = 'create' | 'read' | 'update' | 'delete' | 'comment' | 'explain';
export type Permission = {
@@ -6,7 +8,7 @@ export type Permission = {
collection: string;
action: PermissionsAction;
permissions: Record<string, any>;
validation: Record<string, any> | null;
validation: Filter | null;
limit: number | null;
presets: Record<string, any> | null;
fields: string[] | null;