Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }