diff --git a/server/channels/api4/team_test.go b/server/channels/api4/team_test.go index ad260d5d59..3365e5a51b 100644 --- a/server/channels/api4/team_test.go +++ b/server/channels/api4/team_test.go @@ -326,7 +326,19 @@ func TestGetTeamSanitization(t *testing.T) { require.Empty(t, rteam.InviteId, "should have sanitized inviteid") }) - t.Run("team admin", func(t *testing.T) { + t.Run("team admin default removed", func(t *testing.T) { + // the above test removes PermissionInviteUser from TeamUser, + // which also removes it from TeamAdmin. By default, TeamAdmin + // permission is inherited from TeamUser. + rteam, _, err := th.Client.GetTeam(context.Background(), team.Id, "") + require.NoError(t, err) + + require.NotEmpty(t, rteam.Email, "should not have sanitized email") + require.Empty(t, rteam.InviteId, "should have sanitized inviteid") + }) + + t.Run("team admin permission re-added", func(t *testing.T) { + th.AddPermissionToRole(model.PermissionInviteUser.Id, model.TeamAdminRoleId) rteam, _, err := th.Client.GetTeam(context.Background(), team.Id, "") require.NoError(t, err) @@ -1452,7 +1464,19 @@ func TestGetTeamByNameSanitization(t *testing.T) { require.Empty(t, rteam.InviteId, "should have sanitized inviteid") }) - t.Run("team admin/non-admin", func(t *testing.T) { + t.Run("team admin/non-admin without invite permission", func(t *testing.T) { + // the above test removes PermissionInviteUser from TeamUser, + // which also removes it from TeamAdmin. By default, TeamAdmin + // permission is inherited from TeamUser. + rteam, _, err := th.Client.GetTeamByName(context.Background(), team.Name, "") + require.NoError(t, err) + + require.NotEmpty(t, rteam.Email, "should not have sanitized email") + require.Empty(t, rteam.InviteId, "should have sanitized inviteid") + }) + + t.Run("team admin/non-admin with invite permission", func(t *testing.T) { + th.AddPermissionToRole(model.PermissionInviteUser.Id, model.TeamAdminRoleId) rteam, _, err := th.Client.GetTeamByName(context.Background(), team.Name, "") require.NoError(t, err) @@ -1861,6 +1885,8 @@ func TestGetTeamsForUserSanitization(t *testing.T) { client := th.CreateClient() th.RemovePermissionFromRole(model.PermissionInviteUser.Id, model.TeamUserRoleId) + defer th.AddPermissionToRole(model.PermissionInviteUser.Id, model.TeamUserRoleId) + th.LoginBasic2WithClient(client) rteams, _, err := client.GetTeamsForUser(context.Background(), th.BasicUser2.Id, "") diff --git a/server/channels/app/team.go b/server/channels/app/team.go index 329d3e7632..b726884314 100644 --- a/server/channels/app/team.go +++ b/server/channels/app/team.go @@ -1906,19 +1906,22 @@ func (a *App) GetTeamIdFromQuery(query url.Values) (string, *model.AppError) { } func (a *App) SanitizeTeam(session model.Session, team *model.Team) *model.Team { - if a.SessionHasPermissionToTeam(session, team.Id, model.PermissionManageTeam) { + manageTeamPermission := a.SessionHasPermissionToTeam(session, team.Id, model.PermissionManageTeam) + inviteUserPermission := a.SessionHasPermissionToTeam(session, team.Id, model.PermissionInviteUser) + + if manageTeamPermission && inviteUserPermission { return team } - - if a.SessionHasPermissionToTeam(session, team.Id, model.PermissionInviteUser) { - inviteId := team.InviteId - team.Sanitize() - team.InviteId = inviteId - return team - } - + email := team.Email + inviteId := team.InviteId team.Sanitize() + if manageTeamPermission { + team.Email = email + } + if inviteUserPermission { + team.InviteId = inviteId + } return team }