internal void AddUserToGroups(int userId, IEnumerable <int> parentGroupIds) { if (parentGroupIds == null) { return; } // place the new relations, skip old ones. foreach (var parentGroupId in parentGroupIds) { var parentGroup = EnsureGroup(parentGroupId); if (!parentGroup.UserMemberIds.Contains(userId)) { parentGroup.UserMemberIds.Add(userId); } Flattener.AddUserToGroup(userId, parentGroup, Membership); } }
/*========================================================================= In memory membership API */ //TODO: When allowing parallel activities in the future, take care of thread safety! internal void AddMembers(int groupId, IEnumerable <int> groupIds, IEnumerable <int> userIds, IEnumerable <int> parentGroupIds) { // place the new relations, skip old ones. var group = EnsureGroup(groupId); if (userIds != null) { foreach (var userId in userIds) { Flattener.AddUserToGroup(userId, group, Membership); if (!group.UserMemberIds.Contains(userId)) { group.UserMemberIds.Add(userId); } } } if (groupIds != null) { foreach (var childGroupId in groupIds) { var childGroup = EnsureGroup(childGroupId); Flattener.AddGroupToGroup(childGroup, group, Membership); AddRelation(group.Groups, childGroup); AddRelation(childGroup.ParentGroups, group); } } if (parentGroupIds != null) { foreach (var parentGroupId in parentGroupIds) { var parentGroup = EnsureGroup(parentGroupId); Flattener.AddGroupToGroup(group, parentGroup, Membership); AddRelation(group.ParentGroups, parentGroup); AddRelation(parentGroup.Groups, group); } } }