From 8bc3c402d1132efb44e68837d31c6598c24969b3 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Mon, 5 Feb 2024 09:05:05 +0800 Subject: [PATCH] MM-56536 Do not update team members scheme roles if user is guest (#25957) * MM-56536 Do not update team members scheme roles if user is guest * feedback review --------- Co-authored-by: Mattermost Build --- server/channels/api4/team_test.go | 4 ++++ server/channels/app/team.go | 16 ++++++++++++---- server/i18n/en.json | 8 ++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/server/channels/api4/team_test.go b/server/channels/api4/team_test.go index 79e4481f04..ad260d5d59 100644 --- a/server/channels/api4/team_test.go +++ b/server/channels/api4/team_test.go @@ -2977,6 +2977,10 @@ func TestUpdateTeamMemberSchemeRoles(t *testing.T) { require.Error(t, err) CheckNotFoundStatus(t, resp) + resp, err = SystemAdminClient.UpdateTeamMemberSchemeRoles(context.Background(), th.BasicTeam.Id, th.BasicUser.Id, s4) + require.Error(t, err) // user is a guest, cannot be set as member or admin + CheckBadRequestStatus(t, resp) + resp, err = SystemAdminClient.UpdateTeamMemberSchemeRoles(context.Background(), "ASDF", th.BasicUser.Id, s4) require.Error(t, err) CheckBadRequestStatus(t, resp) diff --git a/server/channels/app/team.go b/server/channels/app/team.go index 31a2312156..f96fe7d6bd 100644 --- a/server/channels/app/team.go +++ b/server/channels/app/team.go @@ -510,14 +510,22 @@ func (a *App) UpdateTeamMemberSchemeRoles(c request.CTX, teamID string, userID s return nil, err } + if member.SchemeGuest { + return nil, model.NewAppError("UpdateTeamMemberSchemeRoles", "api.team.update_team_member_roles.guest.app_error", nil, "", http.StatusBadRequest) + } + + if isSchemeUser && isSchemeGuest { + return nil, model.NewAppError("UpdateTeamMemberSchemeRoles", "api.team.update_team_member_roles.guest_and_user.app_error", nil, "", http.StatusBadRequest) + } + + if isSchemeAdmin && isSchemeGuest { + return nil, model.NewAppError("UpdateTeamMemberSchemeRoles", "api.team.update_team_member_roles.guest_and_admin.app_error", nil, "", http.StatusBadRequest) + } + member.SchemeAdmin = isSchemeAdmin member.SchemeUser = isSchemeUser member.SchemeGuest = isSchemeGuest - if member.SchemeUser && member.SchemeGuest { - return nil, model.NewAppError("UpdateTeamMemberSchemeRoles", "api.team.update_team_member_roles.guest_and_user.app_error", nil, "", http.StatusBadRequest) - } - // If the migration is not completed, we also need to check the default team_admin/team_user roles are not present in the roles field. if err = a.IsPhase2MigrationCompleted(); err != nil { member.ExplicitRoles = RemoveRoles([]string{model.TeamGuestRoleId, model.TeamUserRoleId, model.TeamAdminRoleId}, member.ExplicitRoles) diff --git a/server/i18n/en.json b/server/i18n/en.json index 2aae8e2380..5dd9d8291a 100644 --- a/server/i18n/en.json +++ b/server/i18n/en.json @@ -3362,6 +3362,14 @@ "id": "api.team.update_restricted_domains.mismatch.app_error", "translation": "Restricting team to {{ .Domain }} is not allowed by the system config. Please contact your system administrator." }, + { + "id": "api.team.update_team_member_roles.guest.app_error", + "translation": "Invalid team member update: A guest cannot be made team member or team admin, please promote as a user first." + }, + { + "id": "api.team.update_team_member_roles.guest_and_admin.app_error", + "translation": "Invalid team member update: A user must cannot be set as a guest and admin at the same time." + }, { "id": "api.team.update_team_member_roles.guest_and_user.app_error", "translation": "Invalid team member update: A user must be a guest or a user but not both."