Skip to content

Commit 974be27

Browse files
committed
[Issue #197] getFilter removes object properties
1 parent b29cc41 commit 974be27

3 files changed

Lines changed: 57 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
### Additions
66

77
### Fixes
8+
- [Issue #197] getFilter removes object properties
89

910
## [3.3.1] Nov-22-2019
1011

src/bodyguard/read-filter.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,15 @@ export function readFilter(
3737
!(obj[member] instanceof Date))
3838
) {
3939
const subObjType = obj[member].constructor;
40-
obj[member] = readFilter(
41-
obj[member],
42-
user,
43-
subObjType,
44-
userType
45-
);
40+
41+
if (subObjType !== {}.constructor) {
42+
obj[member] = readFilter(
43+
obj[member],
44+
user,
45+
subObjType,
46+
userType
47+
);
48+
}
4649
}
4750
else if (member !== 'id') {
4851
const canRead = getCanRead(new objType(), member);

test/spec/api/filters/get-filter.spec.ts

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { getRepository } from 'typeorm';
1+
import { getRepository, Entity } from 'typeorm';
22

33
import { createMockRequest } from '../../../../src/test-probe';
44
import { ExampleUser, BaseModel } from '../../../../src/models';
55
import { getFilter } from '../../../../src/filters';
6-
import { OnlySelfCanRead, OnlyAdminCanRead } from '../../../../src/bodyguard';
6+
import { OnlySelfCanRead, OnlyAdminCanRead, AnyoneCanRead } from '../../../../src/bodyguard';
77

88
class OnlySelfCanReadMember extends BaseModel {
99
@OnlySelfCanRead() public id: number = undefined;
@@ -17,6 +17,10 @@ class NobodyCanReadMember extends BaseModel {
1717
public id: number = undefined;
1818
}
1919

20+
class EntityWithJSONColumn extends BaseModel {
21+
@AnyoneCanRead() public options: Object = undefined;
22+
}
23+
2024
/**
2125
* getFilter()
2226
* pointyapi/guards
@@ -245,4 +249,45 @@ describe('[Guards] getFilter', async () => {
245249

246250
getFilter(request, response, () => {});
247251
});
252+
253+
// https://github.com/StatelessStudio/pointyapi/issues/197
254+
it('allows JSON column value to pass', async () => {
255+
// Create mock request/response
256+
const { request, response } = createMockRequest();
257+
258+
// Create request
259+
const entity: EntityWithJSONColumn = {
260+
options: {
261+
enableSomething: true
262+
}
263+
};
264+
265+
request.query = { select: [ 'options' ] };
266+
request.payload = [ entity ];
267+
request.payloadType = EntityWithJSONColumn;
268+
269+
// Filter
270+
let result = false;
271+
272+
getFilter(request, response, () => {
273+
if (request.payload && request.payload.length) {
274+
if ('options' in request.payload[0]) {
275+
if ('enableSomething' in request.payload[0].options) {
276+
result = true;
277+
}
278+
else {
279+
fail('enableSomething was removed from payload.');
280+
}
281+
}
282+
else {
283+
fail('No options column returned.');
284+
}
285+
}
286+
else {
287+
fail('No payload returned.');
288+
}
289+
});
290+
291+
expect(result).toBe(true);
292+
});
248293
});

0 commit comments

Comments
 (0)