https://github.com/tobkle/create-graphql-server-authorization
Authorization for create-graphql-server
https://github.com/tobkle/create-graphql-server-authorization
authorization generator graphql nodejs server
Last synced: about 1 month ago
JSON representation
Authorization for create-graphql-server
- Host: GitHub
- URL: https://github.com/tobkle/create-graphql-server-authorization
- Owner: tobkle
- License: mit
- Created: 2017-06-05T07:01:18.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2017-09-09T19:55:19.000Z (almost 9 years ago)
- Last Synced: 2026-03-01T22:50:42.614Z (4 months ago)
- Topics: authorization, generator, graphql, nodejs, server
- Language: JavaScript
- Homepage:
- Size: 3.27 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
[](http://badge.fury.io/js/create-graphql-server-authorization) [](https://travis-ci.org/tobkle/create-graphql-server-authorization) [](https://coveralls.io/github/tobkle/create-graphql-server-authorization?branch=master)
# 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 ``` 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.:
```javascript
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
```bash
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"
```javascript
import {
enhanceSchemaForAuthorization
} from 'create-graphql-server-authorization';
...
...
...
// at the end: enhance with Authorization
const outputSchemaWithAuth = enhanceSchemaForAuthorization(outputSchema);
return outputSchemaWithAuth;
}
```
In "generate/model/index.js"
```javascript
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"
```javascript
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](https://tobkle.github.io/create-graphql-server-authorization/)
## Tests
```bash
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.