fix: Default ACL overwrites custom ACL on Parse.Object update (#10061)

This commit is contained in:
Yazan
2026-02-14 01:56:42 +00:00
committed by GitHub
parent 8cfc856424
commit 4ef89d912c
2 changed files with 64 additions and 2 deletions
+62
View File
@@ -951,4 +951,66 @@ describe('Parse.ACL', () => {
expect(acl[user.id].write).toBeTrue();
expect(acl[user.id].read).toBeTrue();
});
it('should not overwrite ACL with defaultACL on update', async () => {
await new Parse.Object('TestObject').save();
const schema = await Parse.Server.database.loadSchema();
await schema.updateClass(
'TestObject',
{},
{
create: { '*': true },
update: { '*': true },
addField: { '*': true },
ACL: {
'*': { read: true },
currentUser: { read: true, write: true },
},
}
);
const user = await Parse.User.signUp('testuser', 'p@ssword');
const obj = new Parse.Object('TestObject');
await obj.save(null, { sessionToken: user.getSessionToken() });
const originalAcl = obj.getACL().toJSON();
expect(originalAcl['*']).toEqual({ read: true });
expect(originalAcl[user.id]).toEqual({ read: true, write: true });
obj.set('field', 'value');
await obj.save(null, { sessionToken: user.getSessionToken() });
const updatedAcl = obj.getACL().toJSON();
expect(updatedAcl).toEqual(originalAcl);
});
it('should allow explicit ACL modification on update', async () => {
await new Parse.Object('TestObject').save();
const schema = await Parse.Server.database.loadSchema();
await schema.updateClass(
'TestObject',
{},
{
create: { '*': true },
update: { '*': true },
ACL: {
'*': { read: true },
currentUser: { read: true, write: true },
},
}
);
const user = await Parse.User.signUp('testuser', 'p@ssword');
const obj = new Parse.Object('TestObject');
await obj.save(null, { sessionToken: user.getSessionToken() });
const customAcl = new Parse.ACL();
customAcl.setPublicReadAccess(false);
customAcl.setReadAccess(user.id, true);
customAcl.setWriteAccess(user.id, true);
obj.setACL(customAcl);
await obj.save(null, { sessionToken: user.getSessionToken() });
const updatedAcl = obj.getACL().toJSON();
expect(updatedAcl['*']).toBeUndefined();
expect(updatedAcl[user.id]).toEqual({ read: true, write: true });
});
});
+2 -2
View File
@@ -370,8 +370,8 @@ RestWrite.prototype.setRequiredFieldsIfNeeded = function () {
}
};
// add default ACL
if (
// add default ACL (only on CREATE, not UPDATE)
if (!this.query &&
schema?.classLevelPermissions?.ACL &&
!this.data.ACL &&
JSON.stringify(schema.classLevelPermissions.ACL) !==