private RoleAssignmentExpansion.UserNode AddORGetNode(ADObjectId parentId) { if (this.userNodeLookupTable.ContainsKey(parentId)) { return(this.userNodeLookupTable[parentId]); } RoleAssignmentExpansion.UserNode userNode = new RoleAssignmentExpansion.UserNode(parentId); this.userNodeLookupTable[parentId] = userNode; return(userNode); }
private void CalculateAssignmentChainsNonRecursive(RoleAssignmentExpansion.UserNode node) { RoleAssignmentExpansion.UserNode userNode = node; List <RoleAssignmentExpansion.UserNode> list = new List <RoleAssignmentExpansion.UserNode>(); list.Add(node); while (list.Count > 0) { while (node.Children.Count > 0) { RoleAssignmentExpansion.UserNode nextChild = node.GetNextChild(); if (nextChild == null) { break; } node = nextChild; list.Add(node); if (node.Children.Count == 0) { List <ADObjectId> list2 = new List <ADObjectId>(); foreach (RoleAssignmentExpansion.UserNode userNode2 in list) { list2.Add(userNode2.User); } list2.Remove(node.User); if (this.assignmentChainsDictionary.ContainsKey(this.GetKey(userNode.User, node.User))) { List <FormattedADObjectIdCollection> list3 = this.assignmentChainsDictionary[this.GetKey(userNode.User, node.User)]; list3.Add(new FormattedADObjectIdCollection(list2)); } else { List <FormattedADObjectIdCollection> list4 = new List <FormattedADObjectIdCollection>(); list4.Add(new FormattedADObjectIdCollection(list2)); this.assignmentChainsDictionary.Add(this.GetKey(userNode.User, node.User), list4); } } } list.Remove(node); if (list.Count > 0) { node = list[list.Count - 1]; } } }
private ExpansionControl OnRecipient(ADRawEntry recipient, ExpansionType recipientExpansionType, ADRawEntry parent, ExpansionType parentExpansionType) { RoleAssignmentExpansion.UserNode item = this.AddORGetNode(recipient.Id); if (parent != null) { RoleAssignmentExpansion.UserNode userNode = this.AddORGetNode(parent.Id); if (!userNode.Children.Contains(item)) { userNode.Children.Add(item); } } if (recipientExpansionType != ExpansionType.GroupMembership && !this.usersList.Contains(recipient.Id)) { this.usersList.Add(recipient.Id); } if (recipientExpansionType == ExpansionType.None || recipientExpansionType == ExpansionType.GroupMembership) { return(ExpansionControl.Continue); } return(ExpansionControl.Skip); }
private void CalculateAssignmentChains(ExchangeRoleAssignment roleAssignment) { RoleAssignmentExpansion.UserNode node = this.AddORGetNode(roleAssignment.User); this.CalculateAssignmentChainsNonRecursive(node); }