예제 #1
0
        public static List <UserQueryResult> AddPermissionToAllConditionalOnIndex(List <UserQueryResult> UQRListIn, List <string> Permissions, string Permission, List <int> Indexes, int ConditionalityIndex = -1)
        {
            int NewPermissionIndex = Permissions.IndexOf(Permission);

            UserQueryResult[] UQRArrayOut = new UserQueryResult[UQRListIn.Count];
            Parallel.For(0, UQRListIn.Count, i => {
                double[] CurrentArray = UQRListIn[i].ReturnAccessVector().ToArray();
                double[] NextArray    = new double[CurrentArray.Length + 1];
                for (int a = 0; a < NextArray.Length; a++)
                {
                    if (a < NewPermissionIndex)
                    {
                        NextArray[a] = CurrentArray[a];
                    }
                    else if (a == NewPermissionIndex)
                    {
                        //this is used if a list of indices of users is provided
                        if (Indexes.Contains(i))
                        {
                            NextArray[a] = 1;
                        }
                        else
                        {
                            NextArray[a] = 0;
                        }
                        //this is used where a conditional index is specified (ie index of a child group)
                        if (ConditionalityIndex >= 0)
                        {
                            //checks for conditional index in access vector
                            //to be used for nested groups
                            if (ConditionalityIndex > NewPermissionIndex)
                            {
                                //conditionality index is drawn from an updated list of groups
                                //so may need to be decremented when referencing out of a non-updated vector
                                if (CurrentArray[ConditionalityIndex - 1] == 1)
                                {
                                    NextArray[a] = 1;
                                }
                            }
                            else
                            {
                                if (CurrentArray[ConditionalityIndex] == 1)
                                {
                                    NextArray[a] = 1;
                                }
                            }
                        }
                    }
                    else
                    {
                        NextArray[a] = CurrentArray[a - 1];
                    }
                }
                DenseVector NewVector = DenseVector.OfArray(NextArray);
                UQRArrayOut[i]        = new UserQueryResult(UQRListIn[i].Title, UQRListIn[i].Description, UQRListIn[i].Name, UQRListIn[i].AccountName, UQRListIn[i].DistinguishedName, NewVector);
            });
            return(UQRArrayOut.ToList());
        }
예제 #2
0
 public static List <UserQueryResult> UpdatePermissionsByCondition(int TargetPermissionIndex, int ConditionalityPermissionIndex, List <UserQueryResult> UQRListIn)
 {
     UserQueryResult[] UQRArrayOut = new UserQueryResult[UQRListIn.Count];
     Parallel.For(0, UQRListIn.Count, i =>
     {
         double[] InterimArray = UQRListIn[i].ReturnAccessVector().ToArray();
         if (InterimArray[ConditionalityPermissionIndex] == 1)
         {
             InterimArray[TargetPermissionIndex] = 1;
         }
         DenseVector NewVector = DenseVector.OfArray(InterimArray);
         UQRArrayOut[i]        = new UserQueryResult(UQRListIn[i].Title, UQRListIn[i].Description, UQRListIn[i].Name, UQRListIn[i].AccountName, UQRListIn[i].DistinguishedName, NewVector);
     });
     return(UQRArrayOut.ToList());
 }