@@ -951,4 +951,65 @@ describe('Parse.ACL', () => {
951951 expect ( acl [ user . id ] . write ) . toBeTrue ( ) ;
952952 expect ( acl [ user . id ] . read ) . toBeTrue ( ) ;
953953 } ) ;
954+
955+ it ( 'should not overwrite ACL with defaultACL on update' , async ( ) => {
956+ await new Parse . Object ( 'TestObject' ) . save ( ) ;
957+ const schema = await Parse . Server . database . loadSchema ( ) ;
958+ await schema . updateClass (
959+ 'TestObject' ,
960+ { } ,
961+ {
962+ create : { '*' : true } ,
963+ update : { '*' : true } ,
964+ ACL : {
965+ '*' : { read : true } ,
966+ currentUser : { read : true , write : true } ,
967+ } ,
968+ }
969+ ) ;
970+ const user = await Parse . User . signUp ( 'testuser' , 'p@ssword' ) ;
971+ const obj = new Parse . Object ( 'TestObject' ) ;
972+ await obj . save ( null , { sessionToken : user . getSessionToken ( ) } ) ;
973+
974+ const originalAcl = obj . getACL ( ) . toJSON ( ) ;
975+ expect ( originalAcl [ '*' ] ) . toEqual ( { read : true } ) ;
976+ expect ( originalAcl [ user . id ] ) . toEqual ( { read : true , write : true } ) ;
977+
978+ obj . set ( 'field' , 'value' ) ;
979+ await obj . save ( null , { sessionToken : user . getSessionToken ( ) } ) ;
980+
981+ const updatedAcl = obj . getACL ( ) . toJSON ( ) ;
982+ expect ( updatedAcl ) . toEqual ( originalAcl ) ;
983+ } ) ;
984+
985+ it ( 'should allow explicit ACL modification on update' , async ( ) => {
986+ await new Parse . Object ( 'TestObject' ) . save ( ) ;
987+ const schema = await Parse . Server . database . loadSchema ( ) ;
988+ await schema . updateClass (
989+ 'TestObject' ,
990+ { } ,
991+ {
992+ create : { '*' : true } ,
993+ update : { '*' : true } ,
994+ ACL : {
995+ '*' : { read : true } ,
996+ currentUser : { read : true , write : true } ,
997+ } ,
998+ }
999+ ) ;
1000+ const user = await Parse . User . signUp ( 'testuser' , 'p@ssword' ) ;
1001+ const obj = new Parse . Object ( 'TestObject' ) ;
1002+ await obj . save ( null , { sessionToken : user . getSessionToken ( ) } ) ;
1003+
1004+ const customAcl = new Parse . ACL ( ) ;
1005+ customAcl . setPublicReadAccess ( false ) ;
1006+ customAcl . setReadAccess ( user . id , true ) ;
1007+ customAcl . setWriteAccess ( user . id , true ) ;
1008+ obj . setACL ( customAcl ) ;
1009+ await obj . save ( null , { sessionToken : user . getSessionToken ( ) } ) ;
1010+
1011+ const updatedAcl = obj . getACL ( ) . toJSON ( ) ;
1012+ expect ( updatedAcl [ '*' ] ) . toBeUndefined ( ) ;
1013+ expect ( updatedAcl [ user . id ] ) . toEqual ( { read : true , write : true } ) ;
1014+ } ) ;
9541015} ) ;
0 commit comments