1
0
mirror of https://github.com/bitwarden/server.git synced 2025-02-11 01:01:36 +01:00

check if group users are the same before updating

This commit is contained in:
Kyle Spearrin 2017-05-15 15:01:16 -04:00
parent 670b548b22
commit fc12d73aae

View File

@ -993,21 +993,34 @@ namespace Bit.Core.Services
await UpdateUsersAsync(group, groupsDict[group.ExternalId].Item2, existingUsersIdDict);
}
if(updateGroups.Any())
{
var existingGroupUsers = (await _groupRepository.GetManyGroupUsersByOrganizationIdAsync(organizationId))
.GroupBy(gu => gu.GroupId)
.ToDictionary(g => g.Key, g => new HashSet<Guid>(g.Select(g => g.OrganizationUserId)));
foreach(var group in updateGroups)
{
group.RevisionDate = DateTime.UtcNow;
group.Name = existingGroupsDict[group.ExternalId].Name;
await _groupRepository.ReplaceAsync(group);
await UpdateUsersAsync(group, groupsDict[group.ExternalId].Item2, existingUsersIdDict);
await UpdateUsersAsync(group, groupsDict[group.ExternalId].Item2, existingUsersIdDict,
existingGroupUsers[group.Id]);
}
}
}
}
private async Task UpdateUsersAsync(Group group, HashSet<string> groupUsers,
Dictionary<string, Guid> existingUsersIdDict)
Dictionary<string, Guid> existingUsersIdDict, HashSet<Guid> existingUsers = null)
{
var users = groupUsers.Union(existingUsersIdDict.Keys).Select(u => existingUsersIdDict[u]);
var users = new HashSet<Guid>(groupUsers.Union(existingUsersIdDict.Keys).Select(u => existingUsersIdDict[u]));
if(existingUsers != null && existingUsers.Count == users.Count && users.SetEquals(existingUsers))
{
return;
}
await _groupRepository.UpdateUsersAsync(group.Id, users);
}