diff --git a/api4/scheme_test.go b/api4/scheme_test.go index 50e114d1af..e492bed539 100644 --- a/api4/scheme_test.go +++ b/api4/scheme_test.go @@ -4,6 +4,7 @@ package api4 import ( + "context" "strings" "testing" @@ -760,3 +761,36 @@ func TestDeleteScheme(t *testing.T) { CheckNotImplementedStatus(t, r6) }) } + +func TestUpdateTeamSchemeWithTeamMembers(t *testing.T) { + th := Setup(t).InitBasic() + defer th.TearDown() + + t.Run("Correctly invalidates team member cache", func(t *testing.T) { + th.App.SetPhase2PermissionsMigrationStatus(true) + + team := th.CreateTeam() + _, _, err := th.App.AddUserToTeam(team.Id, th.BasicUser.Id, th.SystemAdminUser.Id) + require.Nil(t, err) + + teamScheme := th.SetupTeamScheme() + + teamUserRole, err := th.App.GetRoleByName(context.Background(), teamScheme.DefaultTeamUserRole) + require.Nil(t, err) + teamUserRole.Permissions = []string{} + _, err = th.App.UpdateRole(teamUserRole) + require.Nil(t, err) + + th.LoginBasic() + + _, resp := th.Client.CreateChannel(&model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_OPEN, TeamId: team.Id}) + require.Nil(t, resp.Error) + + team.SchemeId = &teamScheme.Id + team, err = th.App.UpdateTeamScheme(team) + require.Nil(t, err) + + _, resp = th.Client.CreateChannel(&model.Channel{DisplayName: "Test API Name", Name: GenerateTestChannelName(), Type: model.CHANNEL_OPEN, TeamId: team.Id}) + require.NotNil(t, resp.Error) + }) +} diff --git a/app/team.go b/app/team.go index ac498383e3..9740fa2714 100644 --- a/app/team.go +++ b/app/team.go @@ -233,6 +233,8 @@ func (a *App) UpdateTeamScheme(team *model.Team) (*model.Team, *model.AppError) } } + a.ClearTeamMembersCache(team.Id) + a.sendTeamEvent(oldTeam, model.WEBSOCKET_EVENT_UPDATE_TEAM_SCHEME) return oldTeam, nil