Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions dist/simple-express-acl.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ var ACL = function () {

var rules = acl.rules;

if (req && req.user && req.user.roles) {
if (req && (req.user && req.user.roles || req.session && req.session.roles)) {
var userRequest = acl.makeUserRequest(req);
var roleAccess = acl.roleAccess(userRequest.resource, userRequest.method);
var roles = acl.makeRoles(userRequest.roles);
Expand Down Expand Up @@ -94,7 +94,7 @@ var ACL = function () {
return res.status(401).send({
status: 'error',
type: 'development',
message: 'No user roles found on req.user.roles'
message: 'No user roles found on req.user.roles or req.session.roles'
});
}
}
Expand All @@ -104,7 +104,7 @@ var ACL = function () {

if (acl.prefix) {}
return {
roles: req.user.roles,
roles: req.user ? req.user.roles : req.session.roles,
method: _lodash2.default.toLower(req.method) || 'get',
resource: acl.makeResource(req)
};
Expand All @@ -128,7 +128,9 @@ var ACL = function () {
var roleName = rule.role;
access[roleName] = false;

var route = _lodash2.default.find(rule.permissions, { resource: resource });
var route = _lodash2.default.find(rule.permissions, function (perm) {
return resource.match(new RegExp(perm.resource !== '*' ? _lodash2.default.toLower(perm.resource) : '/*', 'y'));
});

if (!route) {
// Resource route not found in ACL configuration
Expand Down Expand Up @@ -169,13 +171,13 @@ var ACL = function () {
if (!roleRules || !roleRules.includeRoles) return;

if (_lodash2.default.isString(roleRules.includeRoles)) {
includeRoles.push(_lodash2.default.toLower(roleRules.includeRoles));
includeRoles.push(roleRules.includeRoles);
} else {
includeRoles = _lodash2.default.map(roleRules.includeRoles, _lodash2.default.toLower);
includeRoles = _lodash2.default.map(roleRules.includeRoles);
}

_lodash2.default.each(includeRoles, function (role) {
roles.push(role);
roles = _lodash2.default.concat(roles, acl.makeRoles([role]));
});
});

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "simple-express-acl",
"version": "0.2.4",
"version": "0.2.9",
"description": "Dead simple Express ACL middleware that also works well with JSON Web Token's (JWT) and Passport's JWT strategy",
"main": "dist/simple-express-acl.js",
"author": "David Berube <[email protected]>",
Expand Down
16 changes: 9 additions & 7 deletions src/simple-express-acl.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class ACL {

const rules = acl.rules

if (req && req.user && req.user.roles) {
if (req && ((req.user && req.user.roles) || (req.session && req.session.roles))) {
let userRequest = acl.makeUserRequest(req)
let roleAccess = acl.roleAccess(userRequest.resource, userRequest.method)
let roles = acl.makeRoles(userRequest.roles)
Expand All @@ -53,7 +53,7 @@ class ACL {
return res.status(401).send({
status: 'error',
type: `development`,
message: `No user roles found on req.user.roles`
message: `No user roles found on req.user.roles or req.session.roles`
})
}
}
Expand All @@ -64,7 +64,7 @@ class ACL {

}
return {
roles: req.user.roles,
roles: req.user ? req.user.roles: req.session.roles,
method: _.toLower(req.method) || 'get',
resource: acl.makeResource(req)
}
Expand All @@ -86,7 +86,9 @@ class ACL {
let roleName = rule.role
access[ roleName ] = false

let route = _.find(rule.permissions, { resource })
let route = _.find(rule.permissions, function (perm) {
return resource.match(new RegExp(perm.resource !== '*'? _.toLower(perm.resource) : '/*' , 'y'));
});

if (!route) {
// Resource route not found in ACL configuration
Expand Down Expand Up @@ -122,10 +124,10 @@ class ACL {

if (!roleRules || !roleRules.includeRoles) return

if (_.isString(roleRules.includeRoles)) { includeRoles.push(_.toLower(roleRules.includeRoles)) }
else { includeRoles = _.map(roleRules.includeRoles, _.toLower) }
if (_.isString(roleRules.includeRoles)) { includeRoles.push(roleRules.includeRoles) }
else { includeRoles = _.map(roleRules.includeRoles) }

_.each(includeRoles, (role) => { roles.push(role) })
_.each(includeRoles, (role) => { roles = _.concat(roles, acl.makeRoles([role])); })
})

return roles
Expand Down