0.0.46 • Published 7 years ago

create-graphql-server-authorization v0.0.46

Weekly downloads
4
License
MIT
Repository
github
Last release
7 years ago

npm version Build Status Coverage Status

create-graphql-server-authorization

Adds Authorization Logic to the GraphQL-Server-Generator: create-graphql-server.

If you are using create-grapqhl-server, you come to a point, when you need some kind of authorization on your GraphQL server. This package provides a possible way to do authorization checks.

Therefore it enhances the type schema with two additional GraphQL directives:

  • @authorize
  • @authRole

Use these two directives in your GraphQL type definitions. Then use the create-graphql-server add-type <your-type> command to generate the according GraphQL server code with already injected generated authorization logic code.

Usage

It provides Authorization checks for type authorization.

It adds the two GraphQL directives @authorize and @authRole to the create-graphql-server type system e.g.:

type User
@authorize(
  admin: ["create", "read", "update", "delete"],
  this: ["readOne", "update", "delete"]
)
{
  username: String!
  role: String! @authRole(for: ["admin"]) 
  bio: String!
}

The type "User" is treated as a special type. It adds automatically the input field "password" and "createdBy" and "updatedBy" fields.

Installation

git clone git@github.com:tmeasday/create-graphql-server.git
cd create-graphql-server
yarn add create-graphql-server-authorization

Add it to the generator files here:

  • generate/index.js
  • generate/model/index.js
  • generate/resolver/index.js

In "generate/schema/index.js"

import {
  enhanceSchemaForAuthorization
} from 'create-graphql-server-authorization';
...
...
...
  // at the end: enhance with Authorization
  const outputSchemaWithAuth = enhanceSchemaForAuthorization(outputSchema);

  return outputSchemaWithAuth;
}

In "generate/model/index.js"

import { print } from 'recast';
import { templateToAst } from '../util/read';
import getCode from '../util/getCode';
import { MODEL } from '../util/constants';
import { modulePath } from 'create-graphql-server-authorization';  // <=== here

export default function generateModel(inputSchema) {
  const ast = generateModelAst(inputSchema);
  return print(ast, { trailingComma: true }).code;
}

export function generateModelAst(inputSchema) {

  const templateCode = getCode(MODEL, {
    inputSchema,
    basePath: [__dirname, 'templates'],
    authPath: [modulePath, 'templates', 'model', 'auth']   // <=== here
  });

  // validate syntax of generated template code
  const replacements = {};
  const ast = templateToAst(templateCode, replacements);

  return ast;
}

In "generate/resolver/index.js"

 import { print } from 'recast';
 import getCode from '../util/getCode';
 import { templateToAst } from '../util/read';
 import { RESOLVER } from '../util/constants';
 import { modulePath } from 'create-graphql-server-authorization';   // <=== here

export default function generateResolvers(inputSchema) {
  const ast = generateResolversAst(inputSchema)
  return print(ast, { trailingComma: true }).code;
}

export function generateResolversAst(inputSchema) {
  const templateCode = getCode(RESOLVER, {
    inputSchema,
    basePath: [__dirname, 'templates'],
    authPath: [modulePath, 'templates','resolver', 'auth']   // <=== here
  });

  // validate syntax of generated template code
  const replacements = {};
  const ast = templateToAst(templateCode, replacements);

  return ast;
}

Documentation

API Documentation

Tests

yarn test

Contributing

In lieu of a formal style guide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.

0.0.46

7 years ago

0.0.45

7 years ago

0.0.44

7 years ago

0.0.43

7 years ago

0.0.42

7 years ago

0.0.41

7 years ago

0.0.40

7 years ago

0.0.39

7 years ago

0.0.38

7 years ago

0.0.37

7 years ago

0.0.36

7 years ago

0.0.35

7 years ago

0.0.34

7 years ago

0.0.33

7 years ago

0.0.32

7 years ago

0.0.31

7 years ago

0.0.30

7 years ago

0.0.29

7 years ago

0.0.28

7 years ago

0.0.27

7 years ago

0.0.23

7 years ago

0.0.22

7 years ago

0.0.21

7 years ago

0.0.20

7 years ago

0.0.19

7 years ago

0.0.18

7 years ago

0.0.17

7 years ago

0.0.14

7 years ago

0.0.13

7 years ago

0.0.12

7 years ago

0.0.11

7 years ago

0.0.10

7 years ago

0.0.9

7 years ago

0.0.7

7 years ago

0.0.5

7 years ago

0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago