Beispiel #1
0
 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);
 }
Beispiel #2
0
        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];
                }
            }
        }
Beispiel #3
0
 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);
 }
Beispiel #4
0
 private void CalculateAssignmentChains(ExchangeRoleAssignment roleAssignment)
 {
     RoleAssignmentExpansion.UserNode node = this.AddORGetNode(roleAssignment.User);
     this.CalculateAssignmentChainsNonRecursive(node);
 }