Files
speckle-server/modules/core/graph/directives/hasScope.js
T
2020-08-21 13:45:44 +01:00

23 lines
804 B
JavaScript

const { ForbiddenError, SchemaDirectiveVisitor } = require( 'apollo-server-express' )
const { defaultFieldResolver } = require( 'graphql' )
const appRoot = require( 'app-root-path' )
const { validateScopes } = require( `${appRoot}/modules/shared` )
module.exports = {
hasScope: class HasScopeDirective extends SchemaDirectiveVisitor {
visitFieldDefinition( field, details ) {
const { resolver = field.resolve || defaultFieldResolver, name } = field
const requiredScope = this.args.scope
field.resolve = async function ( parent, args, context, info ) {
const currentScopes = context.scopes
await validateScopes( currentScopes, requiredScope )
const data = await resolver.call( this, parent, args, context, info )
return data
}
}
}
}