v1.18.x
barisusakli 10 years ago
parent 8026b3c7d8
commit b2087f94e2

@ -83,30 +83,5 @@ function isGuestAllowedTo(privilege, cids, callback) {
groups.isMemberOfGroups('guests', groupKeys, callback); groups.isMemberOfGroups('guests', groupKeys, callback);
} }
helpers.hasEnoughReputationFor = function(privilege, uid, callback) {
if (parseInt(meta.config['privileges:disabled'], 10) || !parseInt(uid, 10)) {
return callback(null, false);
}
user.getUserField(uid, 'reputation', function(err, reputation) {
if (err) {
return callback(null, false);
}
reputation = parseInt(reputation, 10);
if (Array.isArray(privilege)) {
for(var i=0; i<privilege.length; ++i) {
if (reputation >= parseInt(meta.config[privilege[i]], 10)) {
return callback(null, true);
}
}
callback(null, false);
} else {
callback(null, reputation >= parseInt(meta.config[privilege], 10));
}
});
};
module.exports = helpers; module.exports = helpers;

@ -21,28 +21,18 @@ module.exports = function(privileges) {
if (!Array.isArray(pids) || !pids.length) { if (!Array.isArray(pids) || !pids.length) {
return callback(null, []); return callback(null, []);
} }
async.parallel({
manage: function(next) {
helpers.hasEnoughReputationFor(['privileges:manage_content', 'privileges:manage_topic'], uid, next);
},
isAdministrator: function(next) {
user.isAdministrator(uid, next);
},
}, function(err, userResults) {
if(err) {
return callback(err);
}
var userPriv = userResults.isAdministrator || userResults.manage;
async.parallel({ async.parallel({
isOwner: function(next) { isAdmin: function(next){
posts.isOwner(pids, uid, next); user.isAdministrator(uid, next);
}, },
isModerator: function(next) { isModerator: function(next) {
posts.isModerator(pids, uid, next); posts.isModerator(pids, uid, next);
},
isOwner: function(next) {
posts.isOwner(pids, uid, next);
} }
}, function(err, postResults) { }, function(err, results) {
if (err) { if (err) {
return callback(err); return callback(err);
} }
@ -50,17 +40,16 @@ module.exports = function(privileges) {
var privileges = []; var privileges = [];
for (var i=0; i<pids.length; ++i) { for (var i=0; i<pids.length; ++i) {
var editable = userPriv || postResults.isModerator[i] || postResults.isOwner[i]; var editable = results.isAdmin || results.isModerator[i] || results.isOwner[i];
privileges.push({ privileges.push({
editable: editable, editable: editable,
view_deleted: editable, view_deleted: editable,
move: userResults.isAdministrator || postResults.isModerator[i] move: results.isAdmin || results.isModerator[i]
}); });
} }
callback(null, privileges); callback(null, privileges);
}); });
});
}; };
privileges.posts.can = function(privilege, pid, uid, callback) { privileges.posts.can = function(privilege, pid, uid, callback) {
@ -154,16 +143,11 @@ module.exports = function(privileges) {
if (isLocked) { if (isLocked) {
return callback(null, {isLocked: true}); return callback(null, {isLocked: true});
} }
helpers.some([
function(next) {
posts.isOwner(pid, uid, next); posts.isOwner(pid, uid, next);
}, },
function(next) { function(isOwner, next) {
helpers.hasEnoughReputationFor(['privileges:manage_content', 'privileges:manage_topic'], uid, next); next(null, {editable: isOwner});
}
], function(err, editable) {
next(err, {editable: editable});
});
} }
], callback); ], callback);
} }

@ -25,7 +25,6 @@ module.exports = function(privileges) {
isOwner: function(next) { isOwner: function(next) {
next(null, parseInt(uid, 10) === parseInt(topic.uid, 10)); next(null, parseInt(uid, 10) === parseInt(topic.uid, 10));
}, },
manage_topic: async.apply(helpers.hasEnoughReputationFor, 'privileges:manage_topic', uid),
isAdministrator: async.apply(user.isAdministrator, uid), isAdministrator: async.apply(user.isAdministrator, uid),
isModerator: async.apply(user.isModerator, uid, topic.cid), isModerator: async.apply(user.isModerator, uid, topic.cid),
disabled: async.apply(categories.getCategoryField, topic.cid, 'disabled') disabled: async.apply(categories.getCategoryField, topic.cid, 'disabled')
@ -38,7 +37,7 @@ module.exports = function(privileges) {
var disabled = parseInt(results.disabled, 10) === 1; var disabled = parseInt(results.disabled, 10) === 1;
var isAdminOrMod = results.isAdministrator || results.isModerator; var isAdminOrMod = results.isAdministrator || results.isModerator;
var editable = isAdminOrMod || results.manage_topic; var editable = isAdminOrMod;
var deletable = isAdminOrMod || results.isOwner; var deletable = isAdminOrMod || results.isOwner;
plugins.fireHook('filter:privileges.topics.get', { plugins.fireHook('filter:privileges.topics.get', {
@ -47,7 +46,7 @@ module.exports = function(privileges) {
view_thread_tools: editable || deletable, view_thread_tools: editable || deletable,
editable: editable, editable: editable,
deletable: deletable, deletable: deletable,
view_deleted: isAdminOrMod || results.manage_topic || results.isOwner, view_deleted: isAdminOrMod || results.isOwner,
disabled: disabled, disabled: disabled,
tid: tid, tid: tid,
uid: uid uid: uid
@ -106,9 +105,6 @@ module.exports = function(privileges) {
function(next) { function(next) {
topics.isOwner(tid, uid, next); topics.isOwner(tid, uid, next);
}, },
function(next) {
helpers.hasEnoughReputationFor('privileges:manage_topic', uid, next);
},
function(next) { function(next) {
isAdminOrMod(tid, uid, next); isAdminOrMod(tid, uid, next);
} }

@ -19,24 +19,6 @@
</div> </div>
<div class="panel panel-default">
<div class="panel-heading">Privilege Thresholds</div>
<div class="panel-body">
<form>
<p class="help-block">
Use privilege thresholds to manage how much reputation a user must gain to receive moderator access.
</p>
<strong>Manage Thread</strong><br /> <input type="text" class="form-control" value="1000" data-field="privileges:manage_topic"><br />
<strong>Manage Content</strong><br /> <input type="text" class="form-control" value="1000" data-field="privileges:manage_content"><br />
<div class="checkbox">
<label>
<input type="checkbox" data-field="privileges:disabled"> <strong>Disable Privilege Threshold System</strong>
</label>
</div>
</form>
</div>
</div>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">Activity Thresholds</div> <div class="panel-heading">Activity Thresholds</div>
<div class="panel-body"> <div class="panel-body">

Loading…
Cancel
Save