[MM-33908] Resync LDAP Groups to Teams and Channels (#17372)
* add includeRemovedMembers flag * fix API call in client4.go * remove check for 'since' * add comments * run make app-layers * re-run CI tests Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
3e5b0a7d7f
Коммит
9f4902e188
@@ -706,23 +706,29 @@ func (s *SqlGroupStore) DeleteGroupSyncable(groupID string, syncableID string, s
|
||||
return groupSyncable, nil
|
||||
}
|
||||
|
||||
func (s *SqlGroupStore) TeamMembersToAdd(since int64, teamID *string) ([]*model.UserTeamIDPair, error) {
|
||||
func (s *SqlGroupStore) TeamMembersToAdd(since int64, teamID *string, includeRemovedMembers bool) ([]*model.UserTeamIDPair, error) {
|
||||
builder := s.getQueryBuilder().Select("GroupMembers.UserId", "GroupTeams.TeamId").
|
||||
From("GroupMembers").
|
||||
Join("GroupTeams ON GroupTeams.GroupId = GroupMembers.GroupId").
|
||||
Join("UserGroups ON UserGroups.Id = GroupMembers.GroupId").
|
||||
Join("Teams ON Teams.Id = GroupTeams.TeamId").
|
||||
JoinClause("LEFT OUTER JOIN TeamMembers ON TeamMembers.TeamId = GroupTeams.TeamId AND TeamMembers.UserId = GroupMembers.UserId").
|
||||
Where(sq.Eq{
|
||||
"TeamMembers.UserId": nil,
|
||||
"UserGroups.DeleteAt": 0,
|
||||
"GroupTeams.DeleteAt": 0,
|
||||
"GroupTeams.AutoAdd": true,
|
||||
"GroupMembers.DeleteAt": 0,
|
||||
"Teams.DeleteAt": 0,
|
||||
}).
|
||||
Where("(GroupMembers.CreateAt >= ? OR GroupTeams.UpdateAt >= ?)", since, since)
|
||||
})
|
||||
|
||||
if !includeRemovedMembers {
|
||||
builder = builder.
|
||||
JoinClause("LEFT OUTER JOIN TeamMembers ON TeamMembers.TeamId = GroupTeams.TeamId AND TeamMembers.UserId = GroupMembers.UserId").
|
||||
Where(sq.Eq{"TeamMembers.UserId": nil}).
|
||||
Where(sq.Or{
|
||||
sq.GtOrEq{"GroupMembers.CreateAt": since},
|
||||
sq.GtOrEq{"GroupTeams.UpdateAt": since},
|
||||
})
|
||||
}
|
||||
if teamID != nil {
|
||||
builder = builder.Where(sq.Eq{"Teams.Id": *teamID})
|
||||
}
|
||||
@@ -742,24 +748,32 @@ func (s *SqlGroupStore) TeamMembersToAdd(since int64, teamID *string) ([]*model.
|
||||
return teamMembers, nil
|
||||
}
|
||||
|
||||
func (s *SqlGroupStore) ChannelMembersToAdd(since int64, channelID *string) ([]*model.UserChannelIDPair, error) {
|
||||
func (s *SqlGroupStore) ChannelMembersToAdd(since int64, channelID *string, includeRemovedMembers bool) ([]*model.UserChannelIDPair, error) {
|
||||
builder := s.getQueryBuilder().Select("GroupMembers.UserId", "GroupChannels.ChannelId").
|
||||
From("GroupMembers").
|
||||
Join("GroupChannels ON GroupChannels.GroupId = GroupMembers.GroupId").
|
||||
Join("UserGroups ON UserGroups.Id = GroupMembers.GroupId").
|
||||
Join("Channels ON Channels.Id = GroupChannels.ChannelId").
|
||||
JoinClause("LEFT OUTER JOIN ChannelMemberHistory ON ChannelMemberHistory.ChannelId = GroupChannels.ChannelId AND ChannelMemberHistory.UserId = GroupMembers.UserId").
|
||||
Where(sq.Eq{
|
||||
"ChannelMemberHistory.UserId": nil,
|
||||
"ChannelMemberHistory.LeaveTime": nil,
|
||||
"UserGroups.DeleteAt": 0,
|
||||
"GroupChannels.DeleteAt": 0,
|
||||
"GroupChannels.AutoAdd": true,
|
||||
"GroupMembers.DeleteAt": 0,
|
||||
"Channels.DeleteAt": 0,
|
||||
}).
|
||||
Where("(GroupMembers.CreateAt >= ? OR GroupChannels.UpdateAt >= ?)", since, since)
|
||||
"UserGroups.DeleteAt": 0,
|
||||
"GroupChannels.DeleteAt": 0,
|
||||
"GroupChannels.AutoAdd": true,
|
||||
"GroupMembers.DeleteAt": 0,
|
||||
"Channels.DeleteAt": 0,
|
||||
})
|
||||
|
||||
if !includeRemovedMembers {
|
||||
builder = builder.
|
||||
JoinClause("LEFT OUTER JOIN ChannelMemberHistory ON ChannelMemberHistory.ChannelId = GroupChannels.ChannelId AND ChannelMemberHistory.UserId = GroupMembers.UserId").
|
||||
Where(sq.Eq{
|
||||
"ChannelMemberHistory.UserId": nil,
|
||||
"ChannelMemberHistory.LeaveTime": nil,
|
||||
}).
|
||||
Where(sq.Or{
|
||||
sq.GtOrEq{"GroupMembers.CreateAt": since},
|
||||
sq.GtOrEq{"GroupChannels.UpdateAt": since},
|
||||
})
|
||||
}
|
||||
if channelID != nil {
|
||||
builder = builder.Where(sq.Eq{"Channels.Id": *channelID})
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user