v1.18.x
barisusakli 11 years ago
parent a9adfe9428
commit 9af12819e3

@ -472,10 +472,7 @@ var async = require('async'),
Posts.isOwner = function(pid, uid, callback) { Posts.isOwner = function(pid, uid, callback) {
Posts.getPostField(pid, 'uid', function(err, author) { Posts.getPostField(pid, 'uid', function(err, author) {
if (err) { callback(err, parseInt(author, 10) === parseInt(uid, 10));
return callback(err);
}
callback(null, parseInt(author, 10) === parseInt(uid, 10));
}); });
}; };

@ -73,20 +73,16 @@ module.exports = function(privileges) {
helpers.hasEnoughReputationFor('privileges:manage_topic', uid, next); helpers.hasEnoughReputationFor('privileges:manage_topic', uid, next);
}, },
function(next) { function(next) {
posts.getCidByPid(pid, function(err, cid) { isAdminOrMod(pid, uid, next);
if (err) {
return next(err);
}
user.isModerator(uid, cid, next);
});
},
function(next) {
user.isAdministrator(uid, next);
} }
], callback); ], callback);
}; };
privileges.posts.canMove = function(pid, uid, callback) { privileges.posts.canMove = function(pid, uid, callback) {
isAdminOrMod(pid, uid, callback);
};
function isAdminOrMod(pid, uid, callback) {
helpers.some([ helpers.some([
function(next) { function(next) {
posts.getCidByPid(pid, function(err, cid) { posts.getCidByPid(pid, function(err, cid) {
@ -100,5 +96,5 @@ module.exports = function(privileges) {
user.isAdministrator(uid, next); user.isAdministrator(uid, next);
} }
], callback); ], callback);
}; }
}; };

@ -27,6 +27,9 @@ module.exports = function(privileges) {
read: function(next) { read: function(next) {
helpers.allowedTo('read', uid, cid, next); helpers.allowedTo('read', uid, cid, next);
}, },
isOwner: function(next) {
topics.isOwner(tid, uid, next);
},
manage_topic: function(next) { manage_topic: function(next) {
helpers.hasEnoughReputationFor('privileges:manage_topic', uid, next); helpers.hasEnoughReputationFor('privileges:manage_topic', uid, next);
}, },
@ -40,14 +43,17 @@ module.exports = function(privileges) {
if(err) { if(err) {
return callback(err); return callback(err);
} }
var isAdminOrMod = results.isAdministrator || results.isModerator;
var editable = results.isAdministrator || results.isModerator || results.manage_topic; var editable = isAdminOrMod || results.manage_topic;
var deletable = isAdminOrMod || results.isOwner;
callback(null, { callback(null, {
'topics:reply': results['topics:reply'], 'topics:reply': results['topics:reply'],
read: results.read,
view_thread_tools: editable || deletable,
editable: editable, editable: editable,
view_deleted: editable, deletable: deletable,
read: results.read view_deleted: isAdminOrMod || results.manage_topic || results.isOwner
}); });
}); });
}); });
@ -66,23 +72,22 @@ module.exports = function(privileges) {
privileges.topics.canEdit = function(tid, uid, callback) { privileges.topics.canEdit = function(tid, uid, callback) {
helpers.some([ helpers.some([
function(next) { function(next) {
helpers.hasEnoughReputationFor('privileges:manage_topic', uid, next); topics.isOwner(tid, uid, next);
}, },
function(next) { function(next) {
topics.getTopicField(tid, 'cid', function(err, cid) { helpers.hasEnoughReputationFor('privileges:manage_topic', uid, next);
if (err) {
return next(err);
}
user.isModerator(uid, cid, next);
});
}, },
function(next) { function(next) {
user.isAdministrator(uid, next); isAdminOrMod(tid, uid, next);
} }
], callback); ], callback);
}; };
privileges.topics.canMove = function(tid, uid, callback) { privileges.topics.canMove = function(tid, uid, callback) {
isAdminOrMod(tid, uid, callback);
};
function isAdminOrMod(tid, uid, callback) {
helpers.some([ helpers.some([
function(next) { function(next) {
topics.getTopicField(tid, 'cid', function(err, cid) { topics.getTopicField(tid, 'cid', function(err, cid) {
@ -96,5 +101,5 @@ module.exports = function(privileges) {
user.isAdministrator(uid, next); user.isAdministrator(uid, next);
} }
], callback); ], callback);
}; }
}; };

@ -395,6 +395,12 @@ var async = require('async'),
}); });
}; };
Topics.isOwner = function(tid, uid, callback) {
Topics.getTopicField(tid, 'uid', function(err, author) {
callback(err, parseInt(author, 10) === parseInt(uid, 10));
});
};
Topics.updateTimestamp = function(tid, timestamp) { Topics.updateTimestamp = function(tid, timestamp) {
db.sortedSetAdd('topics:recent', timestamp, tid); db.sortedSetAdd('topics:recent', timestamp, tid);
Topics.setTopicField(tid, 'lastposttime', timestamp); Topics.setTopicField(tid, 'lastposttime', timestamp);

Loading…
Cancel
Save