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()); }
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()); }