Skip to content

Commit ed6a5d8

Browse files
committed
Do not require addField permissions unless the root field does not exist
Also added a corresponding regression test
1 parent 3638b0e commit ed6a5d8

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

spec/Schema.spec.js

+18
Original file line numberDiff line numberDiff line change
@@ -1367,6 +1367,24 @@ describe('SchemaController', () => {
13671367
});
13681368
});
13691369

1370+
describe('Class Level Permissions', () => {
1371+
it('does not require addField for nested modification (#7371)', async () => {
1372+
const testSchema = new Parse.Schema('test_7371');
1373+
testSchema.setCLP({
1374+
create: { ['*']: true },
1375+
update: { ['*']: true },
1376+
addField: {},
1377+
});
1378+
testSchema.addObject('a');
1379+
await testSchema.save();
1380+
const obj = new Parse.Object('test_7371');
1381+
obj.set('a', { b: 1 });
1382+
await obj.save();
1383+
obj.set('a.b', 2);
1384+
await obj.save();
1385+
});
1386+
});
1387+
13701388
describe('Class Level Permissions for requiredAuth', () => {
13711389
beforeEach(() => {
13721390
config = Config.get('test');

src/Controllers/DatabaseController.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,7 @@ class DatabaseController {
894894
if (object[field] && object[field].__op && object[field].__op === 'Delete') {
895895
return false;
896896
}
897-
return schemaFields.indexOf(field) < 0;
897+
return schemaFields.indexOf(getRootFieldName(field)) < 0;
898898
});
899899
if (newKeys.length > 0) {
900900
// adds a marker that new field is being adding during update

0 commit comments

Comments
 (0)