From 37d7756271bd0f182aba3520841d30902d1b9f0a Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 4 Nov 2014 18:44:04 -0500 Subject: [PATCH] hasEnoughRep can take an array user follow uid checks --- src/privileges/helpers.js | 15 +++++++++++++-- src/privileges/posts.js | 14 ++++---------- src/user/follow.js | 21 +++++++++++++++++---- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/privileges/helpers.js b/src/privileges/helpers.js index 293679a24d..72afd32aae 100644 --- a/src/privileges/helpers.js +++ b/src/privileges/helpers.js @@ -123,7 +123,7 @@ function isGuestAllowedTo(privilege, cids, callback) { } helpers.hasEnoughReputationFor = function(privilege, uid, callback) { - if (parseInt(meta.config['privileges:disabled'], 10)) { + if (parseInt(meta.config['privileges:disabled'], 10) || !parseInt(uid, 10)) { return callback(null, false); } @@ -131,7 +131,18 @@ helpers.hasEnoughReputationFor = function(privilege, uid, callback) { if (err) { return callback(null, false); } - callback(null, parseInt(reputation, 10) >= parseInt(meta.config[privilege], 10)); + + reputation = parseInt(reputation, 10); + + if (Array.isArray(privilege)) { + for(var i=0; i= parseInt(meta.config[privilege[i]], 10)) { + return callback(null, true); + } + } + } else { + callback(null, reputation >= parseInt(meta.config[privilege], 10)); + } }); }; diff --git a/src/privileges/posts.js b/src/privileges/posts.js index ca3999898d..c23dae0eae 100644 --- a/src/privileges/posts.js +++ b/src/privileges/posts.js @@ -20,11 +20,8 @@ module.exports = function(privileges) { return callback(null, []); } async.parallel({ - manage_content: function(next) { - helpers.hasEnoughReputationFor('privileges:manage_content', uid, next); - }, - manage_topic: function(next) { - helpers.hasEnoughReputationFor('privileges:manage_topic', uid, next); + manage: function(next) { + helpers.hasEnoughReputationFor(['privileges:manage_content', 'privileges:manage_topic'], uid, next); }, isAdministrator: function(next) { user.isAdministrator(uid, next); @@ -34,7 +31,7 @@ module.exports = function(privileges) { return callback(err); } - var userPriv = userResults.isAdministrator || userResults.manage_topic || userResults.manage_content; + var userPriv = userResults.isAdministrator || userResults.manage; async.parallel({ isOwner: function(next) { @@ -120,10 +117,7 @@ module.exports = function(privileges) { posts.isOwner(pid, uid, next); }, function(next) { - helpers.hasEnoughReputationFor('privileges:manage_content', uid, next); - }, - function(next) { - helpers.hasEnoughReputationFor('privileges:manage_topic', uid, next); + helpers.hasEnoughReputationFor(['privileges:manage_content', 'privileges:manage_topic'], uid, next); } ], next); }); diff --git a/src/user/follow.js b/src/user/follow.js index d8c7cba7de..94b9d555f8 100644 --- a/src/user/follow.js +++ b/src/user/follow.js @@ -33,16 +33,20 @@ module.exports = function(User) { } User.getFollowing = function(uid, callback) { - getFollow('following:' + uid, callback); + getFollow(uid, 'following:' + uid, callback); }; User.getFollowers = function(uid, callback) { - getFollow('followers:' + uid, callback); + getFollow(uid, 'followers:' + uid, callback); }; - function getFollow(set, callback) { + function getFollow(uid, set, callback) { + if (!parseInt(uid, 10)) { + return callback(null, []); + } + db.getSetMembers(set, function(err, uids) { - if(err) { + if (err) { return callback(err); } @@ -51,10 +55,16 @@ module.exports = function(User) { } User.getFollowingCount = function(uid, callback) { + if (!parseInt(uid, 10)) { + return callback(null, 0); + } db.setCount('following:' + uid, callback); }; User.getFollowerCount = function(uid, callback) { + if (!parseInt(uid, 10)) { + return callback(null, 0); + } db.setCount('followers:' + uid, callback); }; @@ -70,6 +80,9 @@ module.exports = function(User) { }; User.isFollowing = function(uid, theirid, callback) { + if (!parseInt(uid, 10) || !parseInt(theirid, 10)) { + return callback(null, false); + } db.isSetMember('following:' + uid, theirid, callback); };