[MM-45272] Fix MM-45272 (#24701)
* Fix MM-45272 * Properly handle permalinks * Fix * Fix tests * Handle only not found case for team member * Fix lint * Use proper config value * Separate permission in several statements * Add tests * Fix lint * Revert changes on utils * Address feedback and more fixes * Address feedback * Fix test * Fix test and related bug * Fix and reorder test * Address feedback * Address feedback --------- Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
c395ec6245
Коммит
2ff0fe343e
@@ -799,10 +799,13 @@ func (a *App) publishWebsocketEventForPermalinkPost(c request.CTX, post *model.P
|
||||
return false, err
|
||||
}
|
||||
|
||||
originalEmbeds := post.Metadata.Embeds
|
||||
originalProps := post.GetProps()
|
||||
permalinkPreviewedPost := post.GetPreviewPost()
|
||||
for _, userID := range userIDs {
|
||||
if permalinkPreviewedPost != nil {
|
||||
post.Metadata.Embeds[0].Data = permalinkPreviewedPost
|
||||
post.Metadata.Embeds = originalEmbeds
|
||||
post.SetProps(originalProps)
|
||||
}
|
||||
|
||||
postForUser := a.sanitizePostMetadataForUserAndChannel(c, post, permalinkPreviewedPost, permalinkPreviewedChannel, userID)
|
||||
@@ -822,6 +825,12 @@ func (a *App) publishWebsocketEventForPermalinkPost(c request.CTX, post *model.P
|
||||
a.Publish(messageCopy)
|
||||
}
|
||||
|
||||
// Restore the metadata that may have been removed in the sanitization
|
||||
if permalinkPreviewedPost != nil {
|
||||
post.Metadata.Embeds = originalEmbeds
|
||||
post.SetProps(originalProps)
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
@@ -2033,7 +2042,7 @@ func (a *App) GetPostIfAuthorized(c request.CTX, postID string, session *model.S
|
||||
}
|
||||
|
||||
if !a.SessionHasPermissionToChannel(c, *session, channel.Id, model.PermissionReadChannelContent) {
|
||||
if channel.Type == model.ChannelTypeOpen {
|
||||
if channel.Type == model.ChannelTypeOpen && !*a.Config().ComplianceSettings.Enable {
|
||||
if !a.SessionHasPermissionToTeam(*session, channel.TeamId, model.PermissionReadPublicChannel) {
|
||||
return nil, a.MakePermissionError(session, []*model.Permission{model.PermissionReadPublicChannel})
|
||||
}
|
||||
@@ -2233,10 +2242,23 @@ func (a *App) GetPostInfo(c request.CTX, postID string) (*model.PostInfo, *model
|
||||
return nil, appErr
|
||||
}
|
||||
|
||||
if team.Type == model.TeamOpen {
|
||||
hasPermissionToAccessTeam = a.HasPermissionToTeam(c, userID, team.Id, model.PermissionJoinPublicTeams)
|
||||
} else if team.Type == model.TeamInvite {
|
||||
hasPermissionToAccessTeam = a.HasPermissionToTeam(c, userID, team.Id, model.PermissionJoinPrivateTeams)
|
||||
teamMember, appErr := a.GetTeamMember(c, channel.TeamId, userID)
|
||||
if appErr != nil && appErr.StatusCode != http.StatusNotFound {
|
||||
return nil, appErr
|
||||
}
|
||||
|
||||
if appErr == nil {
|
||||
if teamMember.DeleteAt == 0 {
|
||||
hasPermissionToAccessTeam = true
|
||||
}
|
||||
}
|
||||
|
||||
if !hasPermissionToAccessTeam {
|
||||
if team.AllowOpenInvite {
|
||||
hasPermissionToAccessTeam = a.HasPermissionToTeam(c, userID, team.Id, model.PermissionJoinPublicTeams)
|
||||
} else {
|
||||
hasPermissionToAccessTeam = a.HasPermissionToTeam(c, userID, team.Id, model.PermissionJoinPrivateTeams)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// This happens in case of DMs and GMs.
|
||||
@@ -2269,12 +2291,16 @@ func (a *App) GetPostInfo(c request.CTX, postID string) (*model.PostInfo, *model
|
||||
HasJoinedChannel: channelMemberErr == nil,
|
||||
}
|
||||
if team != nil {
|
||||
_, teamMemberErr := a.GetTeamMember(c, team.Id, userID)
|
||||
teamMember, teamMemberErr := a.GetTeamMember(c, team.Id, userID)
|
||||
|
||||
teamType := model.TeamInvite
|
||||
if team.AllowOpenInvite {
|
||||
teamType = model.TeamOpen
|
||||
}
|
||||
info.TeamId = team.Id
|
||||
info.TeamType = team.Type
|
||||
info.TeamType = teamType
|
||||
info.TeamDisplayName = team.DisplayName
|
||||
info.HasJoinedTeam = teamMemberErr == nil
|
||||
info.HasJoinedTeam = teamMemberErr == nil && teamMember.DeleteAt == 0
|
||||
}
|
||||
return &info, nil
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user