diff options
author | George Goldberg <george@gberg.me> | 2018-06-11 15:24:08 +0100 |
---|---|---|
committer | Carlos Tadeu Panato Junior <ctadeu@gmail.com> | 2018-06-11 16:24:08 +0200 |
commit | d4761a94cebfd667373e1635dd1c9ad334b3b80c (patch) | |
tree | ff1e4ff5750450ade5823b1d7a0b342cfc36c70a | |
parent | 566539bc67c8e467f88401551f999436e27fe70a (diff) | |
download | chat-d4761a94cebfd667373e1635dd1c9ad334b3b80c.tar.gz chat-d4761a94cebfd667373e1635dd1c9ad334b3b80c.tar.bz2 chat-d4761a94cebfd667373e1635dd1c9ad334b3b80c.zip |
Fix idempotency of scheme migrations. (#8935)
This fixes the issue where if the migration tries to migrate an already
scheme-aware member object it would end up removing it's scheme-derived
roles.
Instead, only if the member object is unmigrated do we default to
setting the scheme-derived role booleans to false. We tell if it is an
unmigrated member object by checking if the booleans are set to null.
-rw-r--r-- | store/sqlstore/channel_store.go | 8 | ||||
-rw-r--r-- | store/sqlstore/team_store.go | 8 |
2 files changed, 12 insertions, 4 deletions
diff --git a/store/sqlstore/channel_store.go b/store/sqlstore/channel_store.go index 5f336d904..476665514 100644 --- a/store/sqlstore/channel_store.go +++ b/store/sqlstore/channel_store.go @@ -1733,8 +1733,12 @@ func (s SqlChannelStore) MigrateChannelMembers(fromChannelId string, fromUserId for _, member := range channelMembers { roles := strings.Fields(member.Roles) var newRoles []string - member.SchemeAdmin = sql.NullBool{Bool: false, Valid: true} - member.SchemeUser = sql.NullBool{Bool: false, Valid: true} + if !member.SchemeAdmin.Valid { + member.SchemeAdmin = sql.NullBool{Bool: false, Valid: true} + } + if !member.SchemeUser.Valid { + member.SchemeUser = sql.NullBool{Bool: false, Valid: true} + } for _, role := range roles { if role == model.CHANNEL_ADMIN_ROLE_ID { member.SchemeAdmin = sql.NullBool{Bool: true, Valid: true} diff --git a/store/sqlstore/team_store.go b/store/sqlstore/team_store.go index fe4c09175..22f0bdb29 100644 --- a/store/sqlstore/team_store.go +++ b/store/sqlstore/team_store.go @@ -755,8 +755,12 @@ func (s SqlTeamStore) MigrateTeamMembers(fromTeamId string, fromUserId string) s for _, member := range teamMembers { roles := strings.Fields(member.Roles) var newRoles []string - member.SchemeAdmin = sql.NullBool{Bool: false, Valid: true} - member.SchemeUser = sql.NullBool{Bool: false, Valid: true} + if !member.SchemeAdmin.Valid { + member.SchemeAdmin = sql.NullBool{Bool: false, Valid: true} + } + if !member.SchemeUser.Valid { + member.SchemeUser = sql.NullBool{Bool: false, Valid: true} + } for _, role := range roles { if role == model.TEAM_ADMIN_ROLE_ID { member.SchemeAdmin = sql.NullBool{Bool: true, Valid: true} |