0.1.1 • Published 7 years ago

assertql v0.1.1

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

Install

npm install assertql -S

Usage

import _ from 'lodash';
import {
  GraphQLObjectType,
  GraphQLString,
  GraphQLInt,
} from 'graphql';
import { withAssertions } from 'assertql';


const loggedIn = (data, args, context, info) => {
  if (!_.get(info, 'rootValue.currentUser.id')) {
    throw new Error('User dose not have enough permission!');
  }
};

const hasRole = (role) => (data, args, context, info) => {
  const roles = _.get(info, 'rootValue.currentUser.roles', []);
  if (!_.includes(roles, role)) {
    throw new Error('User dose not have enough permission!');
  }
};

const isAdmin = hasRole('admin');

const isMe = (data, args, context, info) => {
  if (data.id !== _.get(info, 'rootValue.currentUser.id'))
    throw new Error('User dose not have enough permission!');
  }
};

const userType = new GraphQLObjectType({
  name: 'User',
  fields: withAssertions({
    loggedIn,
    isAdmin,
    isMe,
  }, {
    id: {
      type: GraphQLString,
      // if no assertion, field is public
    },
    email: {
      type: GraphQLString,
      // logged in user, self, admin can read this field
      assertions: ['loggedIn', 'isMe', 'isAdmin'],
    },
    point: {
      type: GraphQLInt,
      // self, admin can read this field
      assertions: ['isMe', 'isAdmin'],
    },
  }),
});
0.1.1

7 years ago

0.0.4

8 years ago

0.0.3

8 years ago

0.0.2

8 years ago

0.0.1

8 years ago

0.0.0

8 years ago