@tasolutions/express-core
Version:
All libs for express
29 lines (24 loc) • 1.2 kB
JavaScript
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();
});
}
];
}