MM-59540 Ensure user has invite team permission in order to change setting (#28670)

* ensure user has invite team permission in order to change setting

* add tests and handle UI

* lint fixes

* revert changes to invite section input

* update tests

* revert bad merge

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
Scott Bishel
2024-11-20 16:02:32 -07:00
коммит произвёл GitHub
родитель 11b66de686
Коммит 790103fae0
5 изменённых файлов: 78 добавлений и 3 удалений

Просмотреть файл

@@ -251,6 +251,12 @@ func patchTeam(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
// if changing "AllowOpenInvite" or "AllowedDomains", user must have InviteUser permission
if (team.AllowOpenInvite != nil || team.AllowedDomains != nil) && !c.App.SessionHasPermissionToTeam(*c.AppContext.Session(), c.Params.TeamId, model.PermissionInviteUser) {
c.SetPermissionError(model.PermissionInviteUser)
return
}
if oldTeam, err := c.App.GetTeam(c.Params.TeamId); err == nil {
auditRec.AddEventPriorState(oldTeam)
auditRec.AddEventObjectType("team")

Просмотреть файл

@@ -618,6 +618,39 @@ func TestPatchTeam(t *testing.T) {
_, _, err = client.PatchTeam(context.Background(), th.BasicTeam.Id, patch)
require.NoError(t, err)
})
t.Run("Changing AllowOpenInvite requires InviteUser permission", func(t *testing.T) {
th.LoginTeamAdmin()
team2 := &model.Team{DisplayName: "Name", Name: GenerateTestTeamName(), Email: th.GenerateTestEmail(), Type: model.TeamOpen, AllowOpenInvite: true}
team2, _, _ = th.Client.CreateTeam(context.Background(), team2)
patch2 := &model.TeamPatch{
AllowOpenInvite: model.NewPointer(false),
AllowedDomains: model.NewPointer("test.com"),
}
rteam2, _, err3 := th.Client.PatchTeam(context.Background(), team2.Id, patch2)
require.NoError(t, err3)
require.Equal(t, team2.Id, rteam2.Id)
require.False(t, rteam2.AllowOpenInvite)
// remove invite user permission from team admin and user roles
th.RemovePermissionFromRole(model.PermissionInviteUser.Id, model.TeamAdminRoleId)
th.RemovePermissionFromRole(model.PermissionInviteUser.Id, model.TeamUserRoleId)
patch2 = &model.TeamPatch{
AllowOpenInvite: model.NewPointer(true),
}
_, _, err3 = th.Client.PatchTeam(context.Background(), rteam2.Id, patch2)
require.Error(t, err3)
patch2 = &model.TeamPatch{
AllowedDomains: model.NewPointer("testDomain.com"),
}
_, _, err3 = th.Client.PatchTeam(context.Background(), rteam2.Id, patch2)
require.Error(t, err3)
})
}
func TestRestoreTeam(t *testing.T) {