【问题标题】:Recursive Security Settings递归安全设置
【发布时间】:2010-11-20 08:52:33
【问题描述】:

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

有什么优雅的方法可以解决这个问题吗?

【问题讨论】:

    标签: c# windows permissions


    【解决方案1】:

    在 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();,而不是重用现有的实例并对其进行修改。否则,您最终可能会获得重复的权限。
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢 hamlin11。我一直在尝试解决这个问题。不过,目前感觉有点“hacky”。我会发布我的想法
    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2011-06-29
    • 2022-11-18
    • 2023-03-30
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多