optimize privileges and assorted fixes.

* new methods
privileges.categories.filter
privileges.topics.filter
privileges.posts.filter

they take a list of ids and a privilege, and return the filtered list of
ids, faster than doing  async.filter and calling the db for each id.

* remove event listeners on recent page before adding
* group.exists works for both single group names and arrays
* helpers.allowedTo works for both a single cid and an array of cids
* moved filter:topic.post hook right before topic creation.
* moved filter:topic.reply hook right before topic reply.
This commit is contained in:
barisusakli
2014-07-29 21:51:46 -04:00
parent eeb4c9f487
commit fed8cc6d53
13 changed files with 247 additions and 133 deletions

View File

@@ -178,11 +178,14 @@ var async = require('async'),
return callback(err);
}
async.filter(pids, function(pid, next) {
privileges.posts.can('read', pid, uid, function(err, canRead) {
next(!err && canRead);
});
}, function(pids) {
if (!Array.isArray(pids) || !pids.length) {
return callback(null, []);
}
privileges.posts.filter('read', pids, uid, function(err, pids) {
if (err) {
return callback(err);
}
Posts.getPostSummaryByPids(pids, {stripTags: true}, callback);
});
});
@@ -487,11 +490,10 @@ var async = require('async'),
return callback(err);
}
async.filter(pids, function(pid, next) {
privileges.posts.can('read', pid, callerUid, function(err, canRead) {
next(!err && canRead);
});
}, function(pids) {
privileges.posts.filter('read', pids, callerUid, function(err, pids) {
if (err) {
return callback(err);
}
getPostsFromSet('uid:' + uid + ':posts', pids, callback);
});
});