added privileges.topics.filterUids

if a topic is deleted and user doesn't have permissions/admin/mod dont
send notifs
v1.18.x
barisusakli 10 years ago
parent 8ee40ece71
commit b7b44e13b1

@ -67,7 +67,7 @@ module.exports = function(privileges) {
}); });
}; };
privileges.topics.filter = function(privilege, tids, uid, callback) { privileges.topics.filterTids = function(privilege, tids, uid, callback) {
if (!Array.isArray(tids) || !tids.length) { if (!Array.isArray(tids) || !tids.length) {
return callback(null, []); return callback(null, []);
} }
@ -98,7 +98,7 @@ module.exports = function(privileges) {
} }
}, function(err, results) { }, function(err, results) {
if (err) { if (err) {
return callback(err); return next(err);
} }
var isModOf = {}; var isModOf = {};
cids = cids.filter(function(cid, index) { cids = cids.filter(function(cid, index) {
@ -126,6 +126,49 @@ module.exports = function(privileges) {
], callback); ], callback);
}; };
privileges.topics.filterUids = function(privilege, tid, uids, callback) {
if (!Array.isArray(uids) || !uids.length) {
return callback(null, []);
}
uids = uids.filter(function(uid, index, array) {
return array.indexOf(uid) === index;
});
async.waterfall([
function(next) {
topics.getTopicFields(tid, ['tid', 'cid', 'deleted'], next);
},
function(topicData, next) {
async.parallel({
disabled: function(next) {
categories.getCategoryField(topicData.cid, 'disabled', next);
},
allowedTo: function(next) {
helpers.isUsersAllowedTo(privilege, uids, topicData.cid, next);
},
isModerators: function(next) {
user.isModerator(uids, topicData.cid, next);
},
isAdmins: function(next) {
user.isAdministrator(uids, next);
}
}, function(err, results) {
if (err) {
return next(err);
}
uids = uids.filter(function(uid, index) {
return parseInt(results.disabled, 10) !== 1 &&
((results.allowedTo[index] && parseInt(topicData.deleted, 10) !== 1) || results.isAdmins[index] || results.isModerators[index]);
});
next(null, uids);
});
}
], callback);
};
privileges.topics.canEdit = function(tid, uid, callback) { privileges.topics.canEdit = function(tid, uid, callback) {
helpers.some([ helpers.some([
function(next) { function(next) {

@ -87,7 +87,7 @@ sitemap.getDynamicUrls = function(callback) {
db.getSortedSetRevRange('topics:recent', 0, parseInt(meta.config.sitemapTopics, 10) || -1, next); db.getSortedSetRevRange('topics:recent', 0, parseInt(meta.config.sitemapTopics, 10) || -1, next);
}, },
function(tids, next) { function(tids, next) {
privileges.topics.filter('read', tids, 0, next); privileges.topics.filterTids('read', tids, 0, next);
}, },
function(tids, next) { function(tids, next) {
topics.getTopicsFields(tids, ['tid', 'title', 'lastposttime'], next); topics.getTopicsFields(tids, ['tid', 'title', 'lastposttime'], next);

@ -129,7 +129,7 @@ var async = require('async'),
Topics.getTopics = function(tids, uid, callback) { Topics.getTopics = function(tids, uid, callback) {
async.waterfall([ async.waterfall([
function(next) { function(next) {
privileges.topics.filter('read', tids, uid, next); privileges.topics.filterTids('read', tids, uid, next);
}, },
function(tids, next) { function(tids, next) {
Topics.getTopicsByTids(tids, uid, next); Topics.getTopicsByTids(tids, uid, next);

@ -117,7 +117,7 @@ module.exports = function(Topics) {
return callback(); return callback();
} }
privileges.categories.filterUids('read', postData.topic.cid, followers, next); privileges.topics.filterUids('read', postData.topic.tid, followers, next);
}, },
function(_followers, next) { function(_followers, next) {
followers = _followers; followers = _followers;

@ -44,7 +44,7 @@ module.exports = function(Topics) {
}).slice(0, count).map(function(topic) { }).slice(0, count).map(function(topic) {
return topic.tid; return topic.tid;
}); });
privileges.topics.filter('read', tids, uid, next); privileges.topics.filterTids('read', tids, uid, next);
}, },
function(tids, next) { function(tids, next) {
Topics.getTopicsByTids(tids, uid, next); Topics.getTopicsByTids(tids, uid, next);

@ -114,7 +114,7 @@ module.exports = function(Topics) {
async.waterfall([ async.waterfall([
function(next) { function(next) {
privileges.topics.filter('read', tids, uid, next); privileges.topics.filterTids('read', tids, uid, next);
}, },
function(tids, next) { function(tids, next) {
Topics.getTopicsFields(tids, ['tid', 'cid'], next); Topics.getTopicsFields(tids, ['tid', 'cid'], next);

Loading…
Cancel
Save