Skip to content

Commit 10c7cb0

Browse files
authored
requiresAuthentication is self-sufficient for ACL's (#3784)
* Adds test to reproduce issue #3753 * Consider requiresAuthentication as the same level as other CLP * Better testing
1 parent 877ef78 commit 10c7cb0

File tree

2 files changed

+56
-5
lines changed

2 files changed

+56
-5
lines changed

spec/Schema.spec.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,4 +1215,57 @@ describe('Class Level Permissions for requiredAuth', () => {
12151215
done();
12161216
});
12171217
});
1218+
1219+
it('required auth test create/get/update/delete with roles (#3753)', (done) => {
1220+
let user;
1221+
config.database.loadSchema().then((schema) => {
1222+
// Just to create a valid class
1223+
return schema.validateObject('Stuff', {foo: 'bar'});
1224+
}).then((schema) => {
1225+
return schema.setPermissions('Stuff', {
1226+
'find': {
1227+
'requiresAuthentication': true,
1228+
'role:admin': true
1229+
},
1230+
'create': { 'role:admin': true },
1231+
'update': { 'role:admin': true },
1232+
'delete': { 'role:admin': true },
1233+
'get': {
1234+
'requiresAuthentication': true,
1235+
'role:admin': true
1236+
}
1237+
});
1238+
}).then(() => {
1239+
const stuff = new Parse.Object('Stuff');
1240+
stuff.set('foo', 'bar');
1241+
return stuff.save(null, {useMasterKey: true}).then(() => {
1242+
const query = new Parse.Query('Stuff');
1243+
return query.get(stuff.id).then(() => {
1244+
done.fail('should not succeed');
1245+
}, () => {
1246+
return new Parse.Query('Stuff').find();
1247+
}).then(() => {
1248+
done.fail('should not succeed');
1249+
}, () => {
1250+
return Promise.resolve();
1251+
});
1252+
}).then(() => {
1253+
return Parse.User.signUp('user', 'password').then((signedUpUser) => {
1254+
user = signedUpUser;
1255+
const query = new Parse.Query('Stuff');
1256+
return query.get(stuff.id, {sessionToken: user.getSessionToken()});
1257+
});
1258+
});
1259+
}).then((result) => {
1260+
expect(result.get('foo')).toEqual('bar');
1261+
const query = new Parse.Query('Stuff');
1262+
return query.find({sessionToken: user.getSessionToken()});
1263+
}).then((results) => {
1264+
expect(results.length).toBe(1);
1265+
done();
1266+
}, (e) => {
1267+
console.error(e);
1268+
done.fail(e);
1269+
});
1270+
});
12181271
})

src/Controllers/SchemaController.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -813,11 +813,9 @@ export default class SchemaController {
813813
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND,
814814
'Permission denied, user needs to be authenticated.');
815815
}
816-
// no other CLP than requiresAuthentication
817-
// let's resolve that!
818-
if (Object.keys(perms).length == 1) {
819-
return Promise.resolve();
820-
}
816+
// requiresAuthentication passed, just move forward
817+
// probably would be wise at some point to rename to 'authenticatedUser'
818+
return Promise.resolve();
821819
}
822820

823821
// No matching CLP, let's check the Pointer permissions

0 commit comments

Comments
 (0)