graphql-rbac provides you a simple way to use Role-based access control in GraphQL. This package integrates with graphql-shield which helps you create a permission layer for your application. Using a schema with array of role, graphql-rbac can help you generate rule functions in graphql-shield. So you can easily use RBAC in your application by providing a schema.
- Easy to specify rule permissions for each field in GraphQL.
- Don't need to write rule function by yourself.
yarn add graphql-rbac
import { RBAC } from 'graphql-rbac' const roles = ['ADMIN', 'DEVELOPER'] const schema = { Query: { users: ['ADMIN', 'DEVELOPER'] }, Mutation: { createUser: ['ADMIN', 'DEVELOPER'], updateUser: ['ADMIN', 'DEVELOPER'], deleteUser: ['ADMIN'] }, User: { password: ['ADMIN'] } } const typeDefs = ` type Query { users: [User!]! } type Mutation { createUser: User! updateUser: User! deleteUser: User } type User { username: String! password: String! } ` const resolvers = { Query: { users: () => [ { username: 'Tom', password: '****' }, { username: 'John', password: '****' }, ] }, Mutation: { createUser: () => { username: 'Tom', password: '****' }, updateUser: () => { username: 'John', password: '****' }, deleteUser: () => null } } const users = { admin: { role: 'ADMIN' }, developer: { role: 'DEVELOPER' } } const getUser = async (req) => { const auth = req.request.headers.authorization let user = {} if (users[auth]) { user = users[auth] } return user } const rbac = new RBAC({roles, schema, getUser}) const server = new GraphQLServer({ typeDefs, resolvers, middlewares: [rbac.middleware()], context: req => ({ user: rbac.context(req) }), })
npm run test
Apache-2.0