diff --git a/keyserver/src/fetchers/thread-permission-fetchers.js b/keyserver/src/fetchers/thread-permission-fetchers.js --- a/keyserver/src/fetchers/thread-permission-fetchers.js +++ b/keyserver/src/fetchers/thread-permission-fetchers.js @@ -162,6 +162,7 @@ threadInfos[threadID], viewer.id, userInfos, + false, ); if (blockedThread) { threadIDsWithDisabledPermissions.add(threadID); diff --git a/lib/shared/thread-utils.js b/lib/shared/thread-utils.js --- a/lib/shared/thread-utils.js +++ b/lib/shared/thread-utils.js @@ -213,6 +213,7 @@ threadInfo, loggedInUserInfo?.id, userInfos, + true, ) ? filterOutDisabledPermissions(threadInfo.currentUser.permissions) : threadInfo.currentUser.permissions; @@ -1115,7 +1116,7 @@ viewerID: ?string, userInfos: UserInfos, ): ThreadCurrentUserInfo { - if (!threadFrozenDueToBlock(threadInfo, viewerID, userInfos)) { + if (!threadFrozenDueToBlock(threadInfo, viewerID, userInfos, false)) { return threadInfo.currentUser; } return { @@ -1131,10 +1132,11 @@ viewerID: ?string, userInfos: UserInfos, checkOnlyViewerBlock: boolean, + skipMemberAdminRoleCheck: boolean, ): boolean { if ( threadOrParentThreadIsGroupChat(threadInfo) || - threadOrParentThreadHasAdminRole(threadInfo) + (!skipMemberAdminRoleCheck && threadOrParentThreadHasAdminRole(threadInfo)) ) { return false; } @@ -1162,8 +1164,15 @@ threadInfo: LegacyRawThreadInfo | RawThreadInfo | ThreadInfo, viewerID: ?string, userInfos: UserInfos, + skipMemberAdminRoleCheck: boolean, ): boolean { - return threadIsWithBlockedUserOnly(threadInfo, viewerID, userInfos, false); + return threadIsWithBlockedUserOnly( + threadInfo, + viewerID, + userInfos, + false, + skipMemberAdminRoleCheck, + ); } function threadFrozenDueToViewerBlock( @@ -1172,7 +1181,13 @@ viewerID: ?string, userInfos: UserInfos, ): boolean { - return threadIsWithBlockedUserOnly(threadInfo, viewerID, userInfos, true); + return threadIsWithBlockedUserOnly( + threadInfo, + viewerID, + userInfos, + true, + false, + ); } const threadTypeDescriptions: { [ThreadType]: string } = {