22 lines
756 B
JavaScript
22 lines
756 B
JavaScript
const { SchemaDirectiveVisitor, ForbiddenError } = require( 'apollo-server-express' )
|
|
const { defaultFieldResolver } = require( 'graphql' )
|
|
const appRoot = require( 'app-root-path' )
|
|
const { validateServerRole } = require( `${appRoot}/modules/shared` )
|
|
|
|
|
|
module.exports = {
|
|
hasRole: class HasRoleDirective extends SchemaDirectiveVisitor {
|
|
visitFieldDefinition( field, details ) {
|
|
const { resolver = field.resolve || defaultFieldResolver, name } = field
|
|
const requiredRole = this.args.role
|
|
|
|
field.resolve = async function ( parent, args, context, info ) {
|
|
await validateServerRole( context, requiredRole )
|
|
|
|
const data = await resolver.call( this, parent, args, context, info )
|
|
return data
|
|
}
|
|
}
|
|
}
|
|
}
|