diff --git a/server/channels/api4/post_test.go b/server/channels/api4/post_test.go index 11e4c77f77..dc61151a2f 100644 --- a/server/channels/api4/post_test.go +++ b/server/channels/api4/post_test.go @@ -3992,6 +3992,12 @@ func TestPostReminder(t *testing.T) { func TestPostGetInfo(t *testing.T) { th := Setup(t).InitBasic() defer th.TearDown() + + defer th.RestoreDefaultRolePermissions(th.SaveDefaultRolePermissions()) + th.RemovePermissionFromRole(model.PermissionManagePrivateChannelMembers.Id, model.SystemUserRoleId) + th.RemovePermissionFromRole(model.PermissionManagePrivateChannelMembers.Id, model.ChannelUserRoleId) + th.RemovePermissionFromRole(model.PermissionManagePrivateChannelMembers.Id, model.TeamUserRoleId) + client := th.Client sysadminClient := th.SystemAdminClient sysadminClient.AddTeamMember(context.Background(), th.BasicTeam.Id, th.SystemAdminUser.Id) diff --git a/server/channels/app/post.go b/server/channels/app/post.go index 1553a8f2e6..420e305b6c 100644 --- a/server/channels/app/post.go +++ b/server/channels/app/post.go @@ -2296,20 +2296,27 @@ func (a *App) GetPostInfo(c request.CTX, postID string) (*model.PostInfo, *model } hasPermissionToAccessChannel := false - if channel.Type == model.ChannelTypeOpen { + + _, channelMemberErr := a.GetChannelMember(c, channel.Id, userID) + + if channelMemberErr == nil { hasPermissionToAccessChannel = true - } else if channel.Type == model.ChannelTypePrivate { - hasPermissionToAccessChannel = a.HasPermissionToChannel(c, userID, channel.Id, model.PermissionManagePrivateChannelMembers) - } else if channel.Type == model.ChannelTypeDirect || channel.Type == model.ChannelTypeGroup { - hasPermissionToAccessChannel = a.HasPermissionToChannel(c, userID, channel.Id, model.PermissionReadChannelContent) + } + + if !hasPermissionToAccessChannel { + if channel.Type == model.ChannelTypeOpen { + hasPermissionToAccessChannel = true + } else if channel.Type == model.ChannelTypePrivate { + hasPermissionToAccessChannel = a.HasPermissionToChannel(c, userID, channel.Id, model.PermissionManagePrivateChannelMembers) + } else if channel.Type == model.ChannelTypeDirect || channel.Type == model.ChannelTypeGroup { + hasPermissionToAccessChannel = a.HasPermissionToChannel(c, userID, channel.Id, model.PermissionReadChannelContent) + } } if !hasPermissionToAccessChannel { return nil, notFoundError } - _, channelMemberErr := a.GetChannelMember(c, channel.Id, userID) - info := model.PostInfo{ ChannelId: channel.Id, ChannelType: channel.Type,