derrickmehaffy 4dbb64e8a2 change default policies error
Signed-off-by: Derrick Mehaffy <derrickmehaffy@gmail.com>
2022-01-03 06:25:18 -07:00

61 lines
1.3 KiB
JavaScript

'use strict';
const { propOr } = require('lodash/fp');
const { policy: policyUtils } = require('@strapi/utils');
const { PolicyError } = require('@strapi/utils').errors;
const getPoliciesConfig = propOr([], 'policies');
const createPoliciesMiddleware = (resolverConfig, { strapi }) => {
const resolverPolicies = getPoliciesConfig(resolverConfig);
const policies = policyUtils.resolve(resolverPolicies);
return async (resolve, ...rest) => {
// Create a graphql policy context
const context = createGraphQLPolicyContext(...rest);
// Run policies & throw an error if one of them fails
for (const { handler, config } of policies) {
const result = await handler(context, config, { strapi });
if (![true, undefined].includes(result)) {
throw new PolicyError();
}
}
return resolve(...rest);
};
};
const createGraphQLPolicyContext = (parent, args, context, info) => {
return policyUtils.createPolicyContext('graphql', {
get parent() {
return parent;
},
get args() {
return args;
},
get context() {
return context;
},
get info() {
return info;
},
get state() {
return this.context.state;
},
get http() {
return this.context.koaContext;
},
});
};
module.exports = {
createPoliciesMiddleware,
};