public SecurityFolder FindSecurityFolder(List<SecurityGroup> groups, string folder)
{
SecurityFolder result = null;
foreach (var group in groups)
{
string folderRoot = folder;
SecurityFolder current = null;
while (current == null && !string.IsNullOrEmpty(folderRoot))
{
current = group.Folders.FirstOrDefault(i => i.Path == folderRoot);
folderRoot = Path.GetDirectoryName(folderRoot);
}
if (current != null && current.Path != folder && !current.UseSubFolders)
{
//cannot use this parent
current = null;
}
if (current != null)
{
if (result != null)
{
//Merge the groupFolder find in this group with the current result
//Weakest right is applied..
result.FolderRight = (FolderRight)Math.Min((int)result.FolderRight, (int)current.FolderRight);
result.ExpandSubFolders = result.ExpandSubFolders || current.ExpandSubFolders;
result.ManageFolder = result.ManageFolder && current.ManageFolder;
}
else
{
result = (SecurityFolder)Helper.Clone(current);
}
//set IsDefined flag
if (current.Path == folder) result.IsDefined = true;
}
}
return result;
}