Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 递归安全设置_C#_Windows_Permissions - Fatal编程技术网

C# 递归安全设置

C# 递归安全设置,c#,windows,permissions,C#,Windows,Permissions,我想对C#中的所有子体应用文件夹的安全设置。基本上,我想在“文件夹的高级安全设置”中执行与“使用此对象的可继承权限替换所有子体上的所有现有可继承权限”相同的操作 有什么优雅的方法可以做到这一点吗?您可能会发现DirectorySecurity类在这方面很有用 System.Security.AccessControl中可能还有其他一些有价值的工具 命名空间在与google和MSDN相处了一段时间后,我想出了以下代码。看起来很好用 static void Main(string[] args)

我想对C#中的所有子体应用文件夹的安全设置。基本上,我想在“文件夹的高级安全设置”中执行与“使用此对象的可继承权限替换所有子体上的所有现有可继承权限”相同的操作


有什么优雅的方法可以做到这一点吗?

您可能会发现DirectorySecurity类在这方面很有用

System.Security.AccessControl中可能还有其他一些有价值的工具
命名空间

在与google和MSDN相处了一段时间后,我想出了以下代码。看起来很好用

static void Main(string[] args)
{
    DirectoryInfo dInfo = new DirectoryInfo(@"C:\Test\Folder");
    DirectorySecurity dSecurity = dInfo.GetAccessControl();
    ReplaceAllDescendantPermissionsFromObject(dInfo, dSecurity);
}

static void ReplaceAllDescendantPermissionsFromObject(
    DirectoryInfo dInfo, DirectorySecurity dSecurity)
{
    // Copy the DirectorySecurity to the current directory
    dInfo.SetAccessControl(dSecurity);

    foreach (FileInfo fi in dInfo.GetFiles())
    {
        // Get the file's FileSecurity
        var ac = fi.GetAccessControl();

        // inherit from the directory
        ac.SetAccessRuleProtection(false, false);

        // apply change
        fi.SetAccessControl(ac);
    }
    // Recurse into Directories
    dInfo.GetDirectories().ToList()
        .ForEach(d => ReplaceAllDescendantPermissionsFromObject(d, dSecurity));
}

谢谢你,哈姆林。我一直在努力想出一个解决办法。不过,现在感觉有点“不舒服”。我会发布我的想法谢谢你,没问题。你让我一直走在正确的道路上我一直在为这个问题寻找解决方案,因为我希望能够在没有递归的情况下完成它。但最后我放弃了,找到了你的解决方案,谢谢!但是,您应该小心使用权限。最好创建一个新的FileSecurity实例
var ac=new FileSecurity()而不是重用现有的并修改它。否则,您最终可能会获得重复的权限。