MM-23770: Fix for blank DefaultChannelGuestRole on team schemes. (#14210)
* MM-23770: Fix for blank DefaultChannelGuestRole on team schemes. * MM-23770: Adds test for an team scheme with a blank DefaultChannelGuestRole field. * MM-23770: Fix for unexpected Schemes.Get.
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
c0fc6c13d5
Коммит
19cf3e85b7
@@ -13,6 +13,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/mattermost/mattermost-server/v5/model"
|
"github.com/mattermost/mattermost-server/v5/model"
|
||||||
|
"github.com/mattermost/mattermost-server/v5/plugin/plugintest/mock"
|
||||||
|
"github.com/mattermost/mattermost-server/v5/store/storetest/mocks"
|
||||||
"github.com/mattermost/mattermost-server/v5/utils"
|
"github.com/mattermost/mattermost-server/v5/utils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
@@ -3138,6 +3140,34 @@ func TestGetChannelModerations(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("Does not return an error if the team scheme has a blank DefaultChannelGuestRole field", func(t *testing.T) {
|
||||||
|
scheme := th.SetupTeamScheme()
|
||||||
|
scheme.DefaultChannelGuestRole = ""
|
||||||
|
|
||||||
|
mockStore := mocks.Store{}
|
||||||
|
mockSchemeStore := mocks.SchemeStore{}
|
||||||
|
mockSchemeStore.On("Get", mock.Anything).Return(scheme, nil)
|
||||||
|
mockStore.On("Scheme").Return(&mockSchemeStore)
|
||||||
|
mockStore.On("Team").Return(th.App.Srv().Store.Team())
|
||||||
|
mockStore.On("Channel").Return(th.App.Srv().Store.Channel())
|
||||||
|
mockStore.On("User").Return(th.App.Srv().Store.User())
|
||||||
|
mockStore.On("Post").Return(th.App.Srv().Store.Post())
|
||||||
|
mockStore.On("FileInfo").Return(th.App.Srv().Store.FileInfo())
|
||||||
|
mockStore.On("Webhook").Return(th.App.Srv().Store.Webhook())
|
||||||
|
mockStore.On("System").Return(th.App.Srv().Store.System())
|
||||||
|
mockStore.On("License").Return(th.App.Srv().Store.License())
|
||||||
|
mockStore.On("Role").Return(th.App.Srv().Store.Role())
|
||||||
|
mockStore.On("Close").Return(nil)
|
||||||
|
th.App.Srv().Store = &mockStore
|
||||||
|
|
||||||
|
team.SchemeId = &scheme.Id
|
||||||
|
_, err := th.App.UpdateTeamScheme(team)
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
_, res := th.SystemAdminClient.GetChannelModerations(channel.Id, "")
|
||||||
|
require.Nil(t, res.Error)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPatchChannelModerations(t *testing.T) {
|
func TestPatchChannelModerations(t *testing.T) {
|
||||||
|
|||||||
@@ -698,26 +698,39 @@ func (a *App) GetTeamSchemeChannelRoles(teamId string) (guestRoleName, userRoleN
|
|||||||
|
|
||||||
// GetChannelModerationsForChannel Gets a channels ChannelModerations from either the higherScoped roles or from the channel scheme roles.
|
// GetChannelModerationsForChannel Gets a channels ChannelModerations from either the higherScoped roles or from the channel scheme roles.
|
||||||
func (a *App) GetChannelModerationsForChannel(channel *model.Channel) ([]*model.ChannelModeration, *model.AppError) {
|
func (a *App) GetChannelModerationsForChannel(channel *model.Channel) ([]*model.ChannelModeration, *model.AppError) {
|
||||||
guestRoleName, memberRoleName, _, _ := a.GetSchemeRolesForChannel(channel.Id)
|
guestRoleName, memberRoleName, _, err := a.GetSchemeRolesForChannel(channel.Id)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
memberRole, err := a.GetRoleByName(memberRoleName)
|
memberRole, err := a.GetRoleByName(memberRoleName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
guestRole, err := a.GetRoleByName(guestRoleName)
|
var guestRole *model.Role
|
||||||
|
if len(guestRoleName) > 0 {
|
||||||
|
guestRole, err = a.GetRoleByName(guestRoleName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
higherScopedGuestRoleName, higherScopedMemberRoleName, _, err := a.GetTeamSchemeChannelRoles(channel.TeamId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
higherScopedGuestRoleName, higherScopedMemberRoleName, _, _ := a.GetTeamSchemeChannelRoles(channel.TeamId)
|
|
||||||
higherScopedMemberRole, err := a.GetRoleByName(higherScopedMemberRoleName)
|
higherScopedMemberRole, err := a.GetRoleByName(higherScopedMemberRoleName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
higherScopedGuestRole, err := a.GetRoleByName(higherScopedGuestRoleName)
|
var higherScopedGuestRole *model.Role
|
||||||
if err != nil {
|
if len(guestRoleName) > 0 {
|
||||||
return nil, err
|
higherScopedGuestRole, err = a.GetRoleByName(higherScopedGuestRoleName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return buildChannelModerations(channel.Type, memberRole, guestRole, higherScopedMemberRole, higherScopedGuestRole), nil
|
return buildChannelModerations(channel.Type, memberRole, guestRole, higherScopedMemberRole, higherScopedGuestRole), nil
|
||||||
@@ -821,10 +834,19 @@ func (a *App) PatchChannelModerationsForChannel(channel *model.Channel, channelM
|
|||||||
}
|
}
|
||||||
|
|
||||||
func buildChannelModerations(channelType string, memberRole *model.Role, guestRole *model.Role, higherScopedMemberRole *model.Role, higherScopedGuestRole *model.Role) []*model.ChannelModeration {
|
func buildChannelModerations(channelType string, memberRole *model.Role, guestRole *model.Role, higherScopedMemberRole *model.Role, higherScopedGuestRole *model.Role) []*model.ChannelModeration {
|
||||||
memberPermissions := memberRole.GetChannelModeratedPermissions(channelType)
|
var memberPermissions, guestPermissions, higherScopedMemberPermissions, higherScopedGuestPermissions map[string]bool
|
||||||
guestPermissions := guestRole.GetChannelModeratedPermissions(channelType)
|
if memberRole != nil {
|
||||||
higherScopedMemberPermissions := higherScopedMemberRole.GetChannelModeratedPermissions(channelType)
|
memberPermissions = memberRole.GetChannelModeratedPermissions(channelType)
|
||||||
higherScopedGuestPermissions := higherScopedGuestRole.GetChannelModeratedPermissions(channelType)
|
}
|
||||||
|
if guestRole != nil {
|
||||||
|
guestPermissions = guestRole.GetChannelModeratedPermissions(channelType)
|
||||||
|
}
|
||||||
|
if higherScopedMemberRole != nil {
|
||||||
|
higherScopedMemberPermissions = higherScopedMemberRole.GetChannelModeratedPermissions(channelType)
|
||||||
|
}
|
||||||
|
if higherScopedGuestRole != nil {
|
||||||
|
higherScopedGuestPermissions = higherScopedGuestRole.GetChannelModeratedPermissions(channelType)
|
||||||
|
}
|
||||||
|
|
||||||
var channelModerations []*model.ChannelModeration
|
var channelModerations []*model.ChannelModeration
|
||||||
for _, permissionKey := range model.CHANNEL_MODERATED_PERMISSIONS {
|
for _, permissionKey := range model.CHANNEL_MODERATED_PERMISSIONS {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user