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 @@ -176,6 +176,7 @@ threadInfo, loggedInUserInfo.id, userInfos, + true, ); const permissions = threadFrozen @@ -864,7 +865,7 @@ viewerID: ?string, userInfos: UserInfos, ): ThreadCurrentUserInfo { - if (!threadFrozenDueToBlock(threadInfo, viewerID, userInfos)) { + if (!threadFrozenDueToBlock(threadInfo, viewerID, userInfos, false)) { return threadInfo.currentUser; } return { @@ -880,10 +881,11 @@ viewerID: ?string, userInfos: UserInfos, checkOnlyViewerBlock: boolean, + skipMemberAdminRoleCheck: boolean, ): boolean { if ( threadOrParentThreadIsGroupChat(threadInfo) || - threadOrParentThreadHasAdminRole(threadInfo) + (!skipMemberAdminRoleCheck && threadOrParentThreadHasAdminRole(threadInfo)) ) { return false; } @@ -911,8 +913,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( @@ -921,7 +930,13 @@ viewerID: ?string, userInfos: UserInfos, ): boolean { - return threadIsWithBlockedUserOnly(threadInfo, viewerID, userInfos, true); + return threadIsWithBlockedUserOnly( + threadInfo, + viewerID, + userInfos, + true, + false, + ); } const threadTypeDescriptions: { [ThreadType]: string } = {