Skip to content

exegesis-js/exegesis-plugin-roles

Repository files navigation

exegesis-plugin-roles

NPM version Build Status Coverage Status Greenkeeper badge semantic-release

Description

Adds support for the "x-exegesis-roles" vendor extension, which adds support for restricting which operations are available to which users after they have been authenticated. Authenticators can optionally return "roles" for a user. "x-exegesis-roles" can be specified either as an array of "role" strings, or as an array of such arrays.

For example:

x-exegesis-roles:
  - a
  - b

would only allow access to an operation if a user has both the 'a' and 'b' role, or:

x-exegesis-roles:
  - [a]
  - [b, c]

would only allow access to an operation if a user has the 'a' role, or has both the 'b' and 'c' role.

"x-exegesis-roles" can be defined on the root OpenAPI object, in which case all operations in the document will require those roles. This can be overridden by specifying "x-exegesis-roles" in an individual operation. An empty array indicates a user requires no roles:

x-exegesis-roles: []

If "x-exegesis-roles" is defined on an operation which has no security requirements defined, this will throw an error.

Roles do not apply to security schemes with the "oauth2" type; scopes apply there instead.

Allowed in:

Installation

npm install exegesis-plugin-roles

Example

Add this to your Exegesis options:

import exegesisRolesPlugin from 'exegesis-plugin-roles';

options = {
    plugins: [
        exegesisRolesPlugin({
            // List of all allowed roles.  If you try to use any roles that
            // aren't in this list in your document, an error will be thrown.
            allowedRoles: ['user', 'admin', 'ops']
        })
    ]
};

In your OpenAPI 3.x document:

paths:
  '/kittens':
    get:
        description: Get a list of kittens
        security:
            - basicAuth: []
            - oauth: ['readOnly']
    post:
        description: Add a new kitten
        security:
            - basicAuth: []
            - oauth: ['readWrite']
        x-exegesis-roles: ['admin'] # Only users with the "admin" role may call this.

The "get" operation can only be executed if the request matches one of the two listed security requirements. The "post" operation can only be executed if the security requirements are matched, and the current "user" has the "admin" role.

Copyright 2018 Jason Walton