public static List <AggregatedShareSettings> ReadAggregatedSharesSettings() { List <AggregatedShareSettings> shares = new List <AggregatedShareSettings>(); XmlDocument document = ReadSettingsXML(); XmlNode sharesNode = document.SelectSingleNode("Settings/AggregatedShares"); foreach (XmlNode shareNode in sharesNode.ChildNodes) { string shareName = shareNode.Attributes["Name"].Value; List <string> paths = new List <string>(); XmlNodeList pathNodes = shareNode.SelectNodes("Path"); foreach (XmlNode pathNode in pathNodes) { paths.Add(pathNode.InnerText.Trim()); } XmlNode readAccessNode = shareNode.SelectSingleNode("ReadAccess"); List <string> readAccess = ReadAccessList(readAccessNode); XmlNode writeAccessNode = shareNode.SelectSingleNode("WriteAccess"); List <string> writeAccess = ReadAccessList(writeAccessNode); AggregatedShareSettings share = new AggregatedShareSettings(shareName, paths, readAccess, writeAccess); shares.Add(share); } return(shares); }
public static FileSystemShare InitializeAggFSShare(AggregatedShareSettings settings) { string shareName = settings.ShareName; List <string> sharePaths = settings.SharePaths; List <string> readAccess = settings.ReadAccess; List <string> writeAccess = settings.WriteAccess; FileSystemShare share = new FileSystemShare(shareName, new NTFileSystemAdapter(new AggregatedFileSystem(sharePaths))); share.AccessRequested += delegate(object sender, AccessRequestArgs args) { bool hasReadAccess = Contains(readAccess, "Users") || Contains(readAccess, args.UserName); bool hasWriteAccess = Contains(writeAccess, "Users") || Contains(writeAccess, args.UserName); if (args.RequestedAccess == FileAccess.Read) { args.Allow = hasReadAccess; } else if (args.RequestedAccess == FileAccess.Write) { args.Allow = hasWriteAccess; } else // FileAccess.ReadWrite { args.Allow = hasReadAccess && hasWriteAccess; } }; return(share); }