2013-05-20 49 views
0

我已经设置了一项任务,允许用户输入UNC路径(即\\ bla.org.dom \ temp \ test \ lowest),并从最低文件夹设置为最高,请构建对每个文件夹具有读/写权限的组和用户列表。我花了很长时间来看待activedirectory服务,并且只发现了死胡同。虽然我对c#有很大的把握,但活动目录和ldap似乎超出了我的头脑。任何有关阅读材料的建议都会受到欢迎。使用UNC路径检索文件夹的组和用户

由于这是我的第一篇文章,任何批评在我的问题格式是值得欢迎的!

编辑:鉴于使用目录安全方法和AccessRules的进一步研究,我已经到了可递归调用帐户名称列表的阶段。这接近我所需要的,但我发现实现它以调用unc路径更加困难。

回答

0

答案本身在DirectoryInfo和DirectorySecurity命名空间内撒谎。使用之前从checking-for-directory-and-file-write-permissions-in-net提供的信息,我设法创建了一个递归调用方法,该方法生成在文件夹上具有读/写权限的用户/组的列表,从顶部开始并向下工作到最低目录。

string dir = ""; 
     if (input.Text.Contains(@"\\")) 
     { 
      dir += @"\\"; 
     } 
     string[] folders = input.Text.Split(new char[] { '\\', '/' }, StringSplitOptions.RemoveEmptyEntries); 


     foreach (string folder in folders) 
     { 

      if (dir.Contains(@"\\") && folder == folders[0]) 
      { 
       dir += folder + @"\"; 
      } 
      else 
      { 
       dir += folder + @"\"; 
       ResultGroup newbox = new ResultGroup(folder); 

       newbox.label1.Click += (x, y) => 
       { 
        splitContainer1.Panel2Collapsed = false; 
        listBox1.Items.Add(newbox.label1.Text); 
       }; 
       flowLayoutPanel1.Controls.Add(newbox); 


       DirectoryInfo di = new DirectoryInfo(dir); 
       DirectorySecurity ds = di.GetAccessControl(); 
       foreach (AccessRule rule in ds.GetAccessRules(true, true, typeof(NTAccount))) 
       { 
        newbox.listBox1.Items.Add(string.Format("{0}", rule.IdentityReference.Value)); 
       } 
      } 
     } 

这允许用户输入本地路径,例如, “C:\ Temp \ Test Folder”或一个UNC路径“\ Server \ Share \ Temp \ Network Test Folder”,然后按文件夹处理文件夹,填充我用来显示数据的表单。