Allow protectedFields for Authenticated users and Public. Fix userField with keys/excludedKeys (#6415)
* fix error message and test it * protected fields fixes * clean * remove duplicate test, add some comments * no need for 'requiresAuthentication'
This commit is contained in:
@@ -5,6 +5,8 @@ const fetch = require('node-fetch');
|
||||
const FormData = require('form-data');
|
||||
const ws = require('ws');
|
||||
require('./helper');
|
||||
const { updateCLP } = require('./dev');
|
||||
|
||||
const pluralize = require('pluralize');
|
||||
const { getMainDefinition } = require('apollo-utilities');
|
||||
const { ApolloLink, split } = require('apollo-link');
|
||||
@@ -4632,6 +4634,84 @@ describe('ParseGraphQLServer', () => {
|
||||
).toBeDefined();
|
||||
});
|
||||
|
||||
it('should respect protectedFields', async done => {
|
||||
await prepareData();
|
||||
await parseGraphQLServer.parseGraphQLSchema.databaseController.schemaCache.clear();
|
||||
|
||||
const className = 'GraphQLClass';
|
||||
|
||||
await updateCLP(
|
||||
{
|
||||
get: { '*': true },
|
||||
find: { '*': true },
|
||||
|
||||
protectedFields: {
|
||||
'*': ['someField', 'someOtherField'],
|
||||
authenticated: ['someField'],
|
||||
'userField:pointerToUser': [],
|
||||
[user2.id]: [],
|
||||
},
|
||||
},
|
||||
className
|
||||
);
|
||||
|
||||
const getObject = async (className, id, user) => {
|
||||
const headers = user
|
||||
? { ['X-Parse-Session-Token']: user.getSessionToken() }
|
||||
: undefined;
|
||||
|
||||
const specificQueryResult = await apolloClient.query({
|
||||
query: gql`
|
||||
query GetSomeObject($id: ID!) {
|
||||
get: graphQLClass(id: $id) {
|
||||
pointerToUser {
|
||||
username
|
||||
id
|
||||
}
|
||||
someField
|
||||
someOtherField
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
id: id,
|
||||
},
|
||||
context: {
|
||||
headers: headers,
|
||||
},
|
||||
});
|
||||
|
||||
return specificQueryResult.data.get;
|
||||
};
|
||||
|
||||
const id = object3.id;
|
||||
|
||||
/* not authenticated */
|
||||
const objectPublic = await getObject(className, id, undefined);
|
||||
|
||||
expect(objectPublic.someField).toBeNull();
|
||||
expect(objectPublic.someOtherField).toBeNull();
|
||||
|
||||
/* authenticated */
|
||||
const objectAuth = await getObject(className, id, user1);
|
||||
|
||||
expect(objectAuth.someField).toBeNull();
|
||||
expect(objectAuth.someOtherField).toBe('B');
|
||||
|
||||
/* pointer field */
|
||||
const objectPointed = await getObject(className, id, user5);
|
||||
|
||||
expect(objectPointed.someField).toBe('someValue3');
|
||||
expect(objectPointed.someOtherField).toBe('B');
|
||||
|
||||
/* for user id */
|
||||
const objectForUser = await getObject(className, id, user2);
|
||||
|
||||
expect(objectForUser.someField).toBe('someValue3');
|
||||
expect(objectForUser.someOtherField).toBe('B');
|
||||
|
||||
done();
|
||||
});
|
||||
describe_only_db('mongo')('read preferences', () => {
|
||||
it('should read from primary by default', async () => {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user