Skip to content

Commit 92f58f6

Browse files
awgeorgeacinader
authored andcommitted
Add tests to prove a user with valid read ACLs still can't read PII data.
1 parent 2db3d53 commit 92f58f6

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

spec/UserPII.spec.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,4 +522,93 @@ describe('Personally Identifiable Information', () => {
522522
.catch(done.fail);
523523
});
524524
});
525+
526+
describe('with privilaged user', () => {
527+
let adminUser;
528+
529+
beforeEach(async done => {
530+
const adminRole = await new Parse.Role(
531+
'Administrator',
532+
new Parse.ACL()
533+
).save(null, { useMasterKey: true });
534+
535+
const managementRole = new Parse.Role(
536+
'managementOf_user' + user.id,
537+
new Parse.ACL(user)
538+
);
539+
managementRole.getRoles().add(adminRole);
540+
await managementRole.save(null, { useMasterKey: true });
541+
542+
const userACL = new Parse.ACL();
543+
userACL.setReadAccess(managementRole, true);
544+
await user.setACL(userACL).save(null, { useMasterKey: true });
545+
546+
adminUser = await Parse.User.signUp('administrator', 'secure');
547+
adminUser = await Parse.User.logIn(adminUser.get('username'), 'secure');
548+
await adminRole
549+
.getUsers()
550+
.add(adminUser)
551+
.save(null, { useMasterKey: true });
552+
553+
done();
554+
});
555+
556+
it('privilaged user should be able to get user PII via API with object', done => {
557+
const userObj = new (Parse.Object.extend(Parse.User))();
558+
userObj.id = user.id;
559+
userObj
560+
.fetch()
561+
.then(
562+
fetchedUser => {
563+
expect(fetchedUser.get('email')).toBe(EMAIL);
564+
},
565+
e => console.error('error', e)
566+
)
567+
.then(done)
568+
.catch(done.fail);
569+
});
570+
571+
it('privilaged user should be able to get user PII via API with Find', done => {
572+
new Parse.Query(Parse.User)
573+
.equalTo('objectId', user.id)
574+
.find()
575+
.then(fetchedUser => {
576+
expect(fetchedUser.get('email')).toBe(EMAIL);
577+
expect(fetchedUser.get('zip')).toBe(ZIP);
578+
expect(fetchedUser.get('ssn')).toBe(SSN);
579+
done();
580+
});
581+
});
582+
583+
it('privilaged user should be able to get user PII via API with Get', done => {
584+
new Parse.Query(Parse.User).get(user.id).then(fetchedUser => {
585+
expect(fetchedUser.get('email')).toBe(EMAIL);
586+
expect(fetchedUser.get('zip')).toBe(ZIP);
587+
expect(fetchedUser.get('ssn')).toBe(SSN);
588+
done();
589+
});
590+
});
591+
592+
it('privilaged user should get user PII via REST by ID', done => {
593+
request({
594+
url: `http://localhost:8378/1/classes/_User/${user.id}`,
595+
json: true,
596+
headers: {
597+
'X-Parse-Application-Id': 'test',
598+
'X-Parse-Javascript-Key': 'test',
599+
'X-Parse-Session-Token': adminUser.getSessionToken(),
600+
},
601+
})
602+
.then(
603+
response => {
604+
const result = response.data;
605+
const fetchedUser = result;
606+
expect(fetchedUser.zip).toBe(ZIP);
607+
expect(fetchedUser.email).toBe(EMAIL);
608+
},
609+
e => console.error('error', e.message)
610+
)
611+
.then(() => done());
612+
});
613+
});
525614
});

0 commit comments

Comments
 (0)