From e1d7c4d8aadb50eef6eb733249a23738572f11aa Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 16 Nov 2020 15:42:39 -0500 Subject: [PATCH] fix: internal helper method hasGlobalPrivilege, DRY --- src/controllers/admin/users.js | 3 ++- src/privileges/users.js | 27 ++++++++++----------------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/controllers/admin/users.js b/src/controllers/admin/users.js index 2397de158d..99f3d4231b 100644 --- a/src/controllers/admin/users.js +++ b/src/controllers/admin/users.js @@ -243,9 +243,10 @@ async function render(req, res, data) { data['filterBy_' + validator.escape(String(filter))] = true; }); - data.showInviteButton = await privileges.users.hasInvitePrivilege(req.uid); if (data.adminInviteOnly) { data.showInviteButton = await privileges.users.isAdministrator(req.uid); + } else { + data.showInviteButton = await privileges.users.hasInvitePrivilege(req.uid); } res.render('admin/manage/users', data); diff --git a/src/privileges/users.js b/src/privileges/users.js index c2bd64777a..9a391f2f13 100644 --- a/src/privileges/users.js +++ b/src/privileges/users.js @@ -107,21 +107,14 @@ module.exports = function (privileges) { return data.canBan; }; - privileges.users.hasBanPrivilege = async function (uid) { - const canBan = await privileges.global.can('ban', uid); - const data = await plugins.fireHook('filter:user.hasBanPrivilege', { - uid: uid, - canBan: canBan, - }); - return data.canBan; - }; - - privileges.users.hasInvitePrivilege = async function (uid) { - const canInvite = await privileges.global.can('invite', uid); - const data = await plugins.fireHook('filter:user.hasInvitePrivilege', { - uid: uid, - canInvite: canInvite, - }); - return data.canInvite; - }; + privileges.users.hasBanPrivilege = async uid => await hasGlobalPrivilege('ban', uid); + privileges.users.hasInvitePrivilege = async uid => await hasGlobalPrivilege('invite', uid); + + async function hasGlobalPrivilege(privilege, uid) { + const privilegeName = privilege.split('-').map(word => word.slice(0, 1).toUpperCase() + word.slice(1)).join(''); + let payload = { uid }; + payload[`can${privilegeName}`] = await privileges.global.can(privilege, uid); + payload = await plugins.fireHook(`filter:user.has${privilegeName}Privilege`, payload); + return payload[`can${privilegeName}`]; + } };