From 801570e4cf29218c0a9d1c6ad40f8aebb669364a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 17 Mar 2021 13:31:31 -0400 Subject: [PATCH] fix: #9404, show signatures if the target user has signature privilege --- src/posts/user.js | 12 ++++++------ src/privileges/global.js | 5 +++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/posts/user.js b/src/posts/user.js index 4509a75814..9ff193c04b 100644 --- a/src/posts/user.js +++ b/src/posts/user.js @@ -14,12 +14,12 @@ const privileges = require('../privileges'); module.exports = function (Posts) { Posts.getUserInfoForPosts = async function (uids, uid) { - const [userData, userSettings, canUseSignature] = await Promise.all([ + const [userData, userSettings, signatureUids] = await Promise.all([ getUserData(uids, uid), user.getMultipleUserSettings(uids), - privileges.global.can('signature', uid), + privileges.global.filterUids('signature', uids), ]); - + const uidsSignatureSet = new Set(signatureUids.map(uid => parseInt(uid, 10))); const groupsMap = await getGroupsMap(userData); userData.forEach((userData, index) => { @@ -35,7 +35,7 @@ module.exports = function (Posts) { return await Promise.all(userData.map(async (userData) => { const [isMemberOfGroups, signature, customProfileInfo] = await Promise.all([ checkGroupMembership(userData.uid, userData.groupTitleArray), - parseSignature(userData, uid, canUseSignature), + parseSignature(userData, uid, uidsSignatureSet), plugins.hooks.fire('filter:posts.custom_profile_info', { profile: [], uid: userData.uid }), ]); @@ -70,8 +70,8 @@ module.exports = function (Posts) { return await groups.isMemberOfGroups(uid, groupTitleArray); } - async function parseSignature(userData, uid, canUseSignature) { - if (!userData.signature || !canUseSignature || meta.config.disableSignatures) { + async function parseSignature(userData, uid, signatureUids) { + if (!userData.signature || !signatureUids.has(userData.uid) || meta.config.disableSignatures) { return ''; } const result = await Posts.parseSignature(userData, uid); diff --git a/src/privileges/global.js b/src/privileges/global.js index f8e8fe894f..563ae3d053 100644 --- a/src/privileges/global.js +++ b/src/privileges/global.js @@ -98,6 +98,11 @@ privsGlobal.canGroup = async function (privilege, groupName) { return await groups.isMember(groupName, `cid:0:privileges:groups:${privilege}`); }; +privsGlobal.filterUids = async function (privilege, uids) { + const privCategories = require('./categories'); + return await privCategories.filterUids(privilege, 0, uids); +}; + privsGlobal.give = async function (privileges, groupName) { await helpers.giveOrRescind(groups.join, privileges, 0, groupName); plugins.hooks.fire('action:privileges.global.give', {