MM-20644: Add users to teams as a SchemeAdmin based on a new configuration field on GroupTeams and GroupChannels records. (#13361)
* MM-20644: Add users to teams as a SchemeAdmin based on a new configuration field on GroupTeams and GroupChannels records. * MM-20644: Adds SchemeAdmin to mapping of the GroupSyncable struct fields. * MM-2064: Adds test to ensure SchemeAdmin field value is mapped. * MM-20644: Adds missing index creation for fresh DBs. * MM-20644: Duplicates UpdateMembersRole across Team and Channel stores. Adds tests. * MM-20644: Fixes some old method name references. * MM-20644: Moves variable declaration; removes Println statement. * MM-20644: Use a SQL query instead of two to update Team and Channel members. * MM-20644: Fixes tests; updates query. * MM-20644: Fix permission check for patching a group syncable. * MM-20644: Fixes test for change of permissions verification in group patch API request. * MM-20644: Fix for ORM select vs insert. * MM-20644: Linting fixes. * MM-20644: Fixes some tests. * MM-20644: Skips changing the role of guests. * MM-20644: Added syncableID filtering
Этот коммит содержится в:
коммит произвёл
catalintomai
родитель
04430041a8
Коммит
605040c597
@@ -320,8 +320,9 @@ func patchGroupSyncable(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
if !c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_MANAGE_SYSTEM) {
|
||||
c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
|
||||
appErr := verifyLinkUnlinkPermission(c, syncableType, syncableID)
|
||||
if appErr != nil {
|
||||
c.Err = appErr
|
||||
return
|
||||
}
|
||||
|
||||
@@ -492,8 +493,8 @@ func getGroupsByChannel(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
b, marshalErr := json.Marshal(struct {
|
||||
Groups []*model.Group `json:"groups"`
|
||||
Count int `json:"total_group_count"`
|
||||
Groups []*model.GroupWithSchemeAdmin `json:"groups"`
|
||||
Count int `json:"total_group_count"`
|
||||
}{
|
||||
Groups: groups,
|
||||
Count: totalCount,
|
||||
@@ -538,8 +539,8 @@ func getGroupsByTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
b, marshalErr := json.Marshal(struct {
|
||||
Groups []*model.Group `json:"groups"`
|
||||
Count int `json:"total_group_count"`
|
||||
Groups []*model.GroupWithSchemeAdmin `json:"groups"`
|
||||
Count int `json:"total_group_count"`
|
||||
}{
|
||||
Groups: groups,
|
||||
Count: totalCount,
|
||||
|
||||
@@ -591,9 +591,18 @@ func TestPatchGroupChannel(t *testing.T) {
|
||||
assert.NotNil(t, groupSyncable)
|
||||
assert.True(t, groupSyncable.AutoAdd)
|
||||
|
||||
role, err := th.App.GetRoleByName("channel_user")
|
||||
require.Nil(t, err)
|
||||
originalPermissions := role.Permissions
|
||||
_, err = th.App.PatchRole(role, &model.RolePatch{Permissions: &[]string{}})
|
||||
require.Nil(t, err)
|
||||
|
||||
_, response = th.Client.PatchGroupSyncable(g.Id, th.BasicChannel.Id, model.GroupSyncableTypeChannel, patch)
|
||||
assert.Equal(t, http.StatusForbidden, response.StatusCode)
|
||||
|
||||
_, err = th.App.PatchRole(role, &model.RolePatch{Permissions: &originalPermissions})
|
||||
require.Nil(t, err)
|
||||
|
||||
th.App.SetLicense(nil)
|
||||
|
||||
_, response = th.SystemAdminClient.PatchGroupSyncable(g.Id, th.BasicChannel.Id, model.GroupSyncableTypeChannel, patch)
|
||||
@@ -645,7 +654,7 @@ func TestGetGroupsByChannel(t *testing.T) {
|
||||
})
|
||||
assert.Nil(t, err)
|
||||
|
||||
_, err = th.App.UpsertGroupSyncable(&model.GroupSyncable{
|
||||
groupSyncable, err := th.App.UpsertGroupSyncable(&model.GroupSyncable{
|
||||
AutoAdd: true,
|
||||
SyncableId: th.BasicChannel.Id,
|
||||
Type: model.GroupSyncableTypeChannel,
|
||||
@@ -677,7 +686,21 @@ func TestGetGroupsByChannel(t *testing.T) {
|
||||
|
||||
groups, _, response := th.SystemAdminClient.GetGroupsByChannel(th.BasicChannel.Id, opts)
|
||||
assert.Nil(t, response.Error)
|
||||
assert.ElementsMatch(t, []*model.Group{group}, groups)
|
||||
assert.ElementsMatch(t, []*model.GroupWithSchemeAdmin{{Group: *group, SchemeAdmin: model.NewBool(false)}}, groups)
|
||||
require.NotNil(t, groups[0].SchemeAdmin)
|
||||
require.False(t, *groups[0].SchemeAdmin)
|
||||
|
||||
// set syncable to true
|
||||
groupSyncable.SchemeAdmin = true
|
||||
_, err = th.App.UpdateGroupSyncable(groupSyncable)
|
||||
require.Nil(t, err)
|
||||
|
||||
// ensure that SchemeAdmin field is updated
|
||||
groups, _, response = th.SystemAdminClient.GetGroupsByChannel(th.BasicChannel.Id, opts)
|
||||
assert.Nil(t, response.Error)
|
||||
assert.ElementsMatch(t, []*model.GroupWithSchemeAdmin{{Group: *group, SchemeAdmin: model.NewBool(true)}}, groups)
|
||||
require.NotNil(t, groups[0].SchemeAdmin)
|
||||
require.True(t, *groups[0].SchemeAdmin)
|
||||
|
||||
groups, _, response = th.SystemAdminClient.GetGroupsByChannel(model.NewId(), opts)
|
||||
assert.Equal(t, "store.sql_channel.get.existing.app_error", response.Error.Id)
|
||||
@@ -698,7 +721,7 @@ func TestGetGroupsByTeam(t *testing.T) {
|
||||
})
|
||||
assert.Nil(t, err)
|
||||
|
||||
_, err = th.App.UpsertGroupSyncable(&model.GroupSyncable{
|
||||
groupSyncable, err := th.App.UpsertGroupSyncable(&model.GroupSyncable{
|
||||
AutoAdd: true,
|
||||
SyncableId: th.BasicTeam.Id,
|
||||
Type: model.GroupSyncableTypeTeam,
|
||||
@@ -728,7 +751,21 @@ func TestGetGroupsByTeam(t *testing.T) {
|
||||
|
||||
groups, _, response := th.SystemAdminClient.GetGroupsByTeam(th.BasicTeam.Id, opts)
|
||||
assert.Nil(t, response.Error)
|
||||
assert.ElementsMatch(t, []*model.Group{group}, groups)
|
||||
assert.ElementsMatch(t, []*model.GroupWithSchemeAdmin{{Group: *group, SchemeAdmin: model.NewBool(false)}}, groups)
|
||||
require.NotNil(t, groups[0].SchemeAdmin)
|
||||
require.False(t, *groups[0].SchemeAdmin)
|
||||
|
||||
// set syncable to true
|
||||
groupSyncable.SchemeAdmin = true
|
||||
_, err = th.App.UpdateGroupSyncable(groupSyncable)
|
||||
require.Nil(t, err)
|
||||
|
||||
// ensure that SchemeAdmin field is updated
|
||||
groups, _, response = th.SystemAdminClient.GetGroupsByTeam(th.BasicTeam.Id, opts)
|
||||
assert.Nil(t, response.Error)
|
||||
assert.ElementsMatch(t, []*model.GroupWithSchemeAdmin{{Group: *group, SchemeAdmin: model.NewBool(true)}}, groups)
|
||||
require.NotNil(t, groups[0].SchemeAdmin)
|
||||
require.True(t, *groups[0].SchemeAdmin)
|
||||
|
||||
groups, _, response = th.SystemAdminClient.GetGroupsByTeam(model.NewId(), opts)
|
||||
assert.Nil(t, response.Error)
|
||||
|
||||
Ссылка в новой задаче
Block a user