/// <summary> /// Add a user to a group /// </summary> /// <param name="user"></param> public void AddUserToGroup(ProvisionConfigExternalDirectorySync.SynchronizeGroupToGroup group, string userName) { //Get (create if necesary) the group's manager var groupManager = GetManagerForGroup(group.TargetGroupName); //Add the user toe hte group groupManager.AddUser(userName); }
/// <summary> /// Add a user to specified Group /// </summary> /// <param name="targetGroupName"></param> /// <param name="asUser"></param> /// <param name="sourceGroupName"></param> private void AddUserToGroupProvisioningTrackingManager(string targetGroupName, Microsoft.Graph.User graphUser, ProvisionConfigExternalDirectorySync.SynchronizeGroupToGroup targetGroup) { //Because the request code can run async, and the collection management used is not designed to be thread-safe //we are going to serialize adding users to the collection. lock (_lock_AddUserToGroupProvisioningTrackingManager) { AddUserToGroupProvisioningTrackingManager_Inner(targetGroupName, graphUser, targetGroup); } }
/// <summary> /// Add the user to the tracking object /// </summary> /// <param name="targetGroupName"></param> /// <param name="graphUser"></param> /// <param name="sourceGroupName"></param> private void AddUserToGroupProvisioningTrackingManager_Inner(string targetGroupName, Microsoft.Graph.User graphUser, ProvisionConfigExternalDirectorySync.SynchronizeGroupToGroup targetGroup) { string emailCandidate = GetUserEmailFromGraphADUser(graphUser); IwsDiagnostics.Assert(!string.IsNullOrWhiteSpace(emailCandidate), "843-706: User principal name is NULL"); //Add the user to our tracking set SetManagerForGroups.AddUserToGroup(targetGroup, emailCandidate); }
/// <summary> /// Itterate down a groups membership, looking in any sub-groups, and record all the members /// </summary> /// <param name="azureGraph"></param> /// <param name="thisGroupsMembers"></param> /// <param name="baseGroupToRetrieve"></param> async Task AzureRecurseGroupsGenerateGroupMembersList(GraphServiceClient azureGraph, IGroupMembersCollectionWithReferencesPage thisGroupsMembers, ProvisionConfigExternalDirectorySync.SynchronizeGroupToGroup baseGroupToRetrieve) { var thispage_members = thisGroupsMembers; do { if (thispage_members.Count > 0) { foreach (var thisMember in thispage_members) { var asUser = thisMember as Microsoft.Graph.User; var asSubGroup = thisMember as Microsoft.Graph.Group; if (asUser != null) { AddUserToGroupProvisioningTrackingManager( baseGroupToRetrieve.TargetGroupName, asUser, baseGroupToRetrieve); //Add them to the list of users } else if (asSubGroup != null) { //----------------------------------------------------------------------------------- //Recurse down the subgroup and get its members //----------------------------------------------------------------------------------- var subGroupsMembers = await azureGraph.Groups[asSubGroup.Id].Members.Request().GetAsync(); await AzureRecurseGroupsGenerateGroupMembersList(azureGraph, subGroupsMembers, baseGroupToRetrieve); } } } //Go to the next page if (thispage_members.NextPageRequest != null) { thispage_members = await thispage_members.NextPageRequest.GetAsync(); } else { thispage_members = null; } } while (thispage_members != null); }