UNPKG

@tasolutions/express-core

Version:
29 lines (24 loc) 1.2 kB
const jwt = require('jsonwebtoken'); const { jwtInfo, appName } = require('../config'); const { HttpStatus, Response } = require('../utils'); module.exports = authorizeRole; function authorizeRole(roles = []) { if (typeof roles === 'string') { roles = [roles]; } return [ (req, res, next) => { if (!req.headers.authorization) return Response.error(res, 'No credentials sent!', HttpStatus.FORBIDDEN); jwt.verify(req.headers.authorization.split(' ')[1], jwtInfo.jwtSecret, async function (err, decode) { if (err) return Response.error(res, 'Invalid auth token provided.', HttpStatus.UNAUTHORIZED); if ((!decode.scopes || !decode.scopes.includes(appName)) && !!appName) return Response.error(res, 'Permission denied - Outside of Scope', HttpStatus.UNAUTHORIZED); let _Roles = roles.filter(x => decode.roles.includes(x)); if (roles.length && _Roles.length == 0) { return Response.error(res, 'Permission denied. Not Role', HttpStatus.UNAUTHORIZED); } req.userLogin = decode; next(); }); } ]; }