enables policy route and policy graphql query

This commit is contained in:
James
2020-05-09 12:54:41 -04:00
parent d57629208a
commit d5331a87b2
6 changed files with 73 additions and 7 deletions

View File

@@ -4,6 +4,7 @@ const graphQLHTTP = require('express-graphql');
const buildObjectType = require('./schema/buildObjectType');
const buildMutationInputType = require('./schema/buildMutationInputType');
const buildBlockType = require('./schema/buildBlockType');
const buildPoliciesType = require('./schema/buildPoliciesType');
const buildLocaleInputType = require('./schema/buildLocaleInputType');
const buildFallbackLocaleInputType = require('./schema/buildFallbackLocaleInputType');
const registerCollections = require('../collections/graphql/register');
@@ -30,6 +31,7 @@ class GraphQL {
this.buildMutationInputType = buildMutationInputType.bind(this);
this.buildWhereInputType = buildWhereInputType;
this.buildObjectType = buildObjectType.bind(this);
this.buildPoliciesType = buildPoliciesType.bind(this);
this.registerCollections = registerCollections.bind(this);
this.initUser = initUser.bind(this);
this.registerGlobals = registerGlobals.bind(this);

View File

@@ -0,0 +1,48 @@
const { GraphQLJSONObject } = require('graphql-type-json');
const { GraphQLBoolean, GraphQLNonNull, GraphQLObjectType } = require('graphql');
const formatName = require('../utilities/formatName');
const buildCollectionFields = (collection) => {
const fields = {};
const operations = ['create', 'read', 'update', 'delete'];
operations.forEach((operation) => {
const capitalizedOperation = operation.charAt(0).toUpperCase() + operation.slice(1);
fields[operation] = {
type: new GraphQLObjectType({
name: formatName(`${collection.labels.singular}${capitalizedOperation}Policy`),
fields: {
permission: { type: new GraphQLNonNull(GraphQLBoolean) },
where: { type: GraphQLJSONObject },
},
}),
};
});
return fields;
};
function buildPoliciesType() {
const fields = {
canAccessAdmin: {
type: new GraphQLNonNull(GraphQLBoolean),
},
};
Object.values(this.config.collections).forEach((collection) => {
fields[collection.slug] = {
type: new GraphQLObjectType({
name: formatName(`${collection.labels.singular}Policy`),
fields: buildCollectionFields(collection),
}),
};
});
return new GraphQLObjectType({
name: 'Policies',
fields,
});
}
module.exports = buildPoliciesType;