递归安全设置

时间:2009-08-17 19:35:17

标签: c# windows permissions

我想将文件夹的安全设置应用于C#中的所有后代。从本质上讲,我想在[文件夹]的高级安全设置中执行与“使用此对象的可继承权限替换所有后代的所有现有可继承权限”相同的事情。

有没有优雅的方法来解决这个问题?

2 个答案:

答案 0 :(得分:5)

经过谷歌和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));
}

答案 1 :(得分:2)

您可能会发现DirectorySecurity类对此有用。

http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.directorysecurity.aspx

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