maglev
Version:
Preconfigured NodeJS framework
108 lines (87 loc) • 3.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.can = can;
exports.hasRole = hasRole;
exports.isGuest = isGuest;
var _webError = require('web-error');
var _webError2 = _interopRequireDefault(_webError);
var _okay = require('okay');
var _okay2 = _interopRequireDefault(_okay);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Return middleware function for permission check
* @param {String} action Name of action
* @param {String} resource Name of resource
* @param {String} redirect Url where is user redirected when he has no permissions
* @param {Number} status Status code of redirect action
* @return {Function} Middleware function
*/
function can(action, resource, redirect) {
var redirectStatus = arguments.length <= 3 || arguments[3] === undefined ? 302 : arguments[3];
return function (req, res, next) {
var server = req.server;
var options = server.options;
var rbac = server.rbac;
var user = req.user;
var callback = (0, _okay2.default)(next, function (canDoIt) {
if (!canDoIt) {
if (redirect) {
return res.redirect(redirectStatus, redirect);
}
return next(new _webError2.default(401, 'You have no access: ' + action + '_' + resource));
}
next();
});
if (!user) {
rbac.can(options.rbac.role.guest, action, resource, callback);
} else {
user.can(rbac, action, resource, callback);
}
};
}
/**
* Return middleware function for permission check
* @param {String} name Name of role
* @param {String} redirect Url where is user redirected when he has no permissions
* @param {Number} status Status code of redirect action
* @return {Function} Middleware function
*/
function hasRole(name, redirect) {
var redirectStatus = arguments.length <= 2 || arguments[2] === undefined ? 302 : arguments[2];
return function (req, res, next) {
var server = req.server;
var rbac = server.rbac;
if (!req.user) {
return next(new _webError2.default(401));
}
req.user.hasRole(rbac, name, (0, _okay2.default)(next, function (has) {
if (!has) {
if (redirect) {
return res.redirect(redirectStatus, redirect);
}
return next(new _webError2.default(401));
}
next();
}));
};
}
/**
* Allow only guest user show content
* @param {String} redirect Url where is user redirected when he has no permissions
* @param {Number} status Status code of redirect action
* @return {Function} Middleware function
*/
function isGuest(redirect) {
var redirectStatus = arguments.length <= 1 || arguments[1] === undefined ? 302 : arguments[1];
return function (req, res, next) {
if (!req.user) {
return next();
}
if (redirect) {
return res.redirect(redirectStatus, redirect);
}
next(new _webError2.default(401, 'You are not a guest'));
};
}