0

我已经设置了一项任务,允许用户输入 UNC 路径(即\\bla.org.dom\temp\test\lowest)并从最低文件夹到最高文件夹,构建已阅读的组和用户列表/write 每个文件夹的权限。我花了相当长的时间研究 activedirectory 服务,但除了死胡同之外什么也没找到。虽然我对 c# 有相当的了解,但 activedirectory 和 ldap 似乎超出了我的想象。任何材料建议阅读将受到欢迎。

由于这是我的第一篇文章,欢迎对我的问题格式提出任何批评!

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

4

1 回答 1

0

答案本身就在 DirectoryInfo 和 DirectorySecurity 命名空间中。使用之前从检查目录和文件写入权限提供的信息,我设法创建了一个递归调用方法,该方法生成对文件夹具有读/写权限的用户/组的列表,开始在顶部并向下工作到最低目录。

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”,然后将逐个文件夹处理,填充表格 I我用来显示数据。

于 2013-05-21T09:04:57.643 回答