【问题标题】:Setting access rights for a directory - receiving exception "No flags can be set"设置目录的访问权限 - 接收异常“无法设置标志”
【发布时间】:2009-01-19 11:25:02
【问题描述】:

我正在尝试编程允许对目录上的 ASPNET 帐户进行写访问。我正在使用以下代码来执行此操作:(请注意,我希望 ASPNET 的“允许写入访问”也传播到子对象:

static void Main(string[] args)
            {


                FileSecurity fileSecurity;

                fileSecurity = new FileSecurity();

                fileSecurity.SetAccessRuleProtection(true, false);

                fileSecurity.AddAccessRule(new FileSystemAccessRule("ASPNET",FileSystemRights.Write,InheritanceFlags.ObjectInherit|InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow));                                   

                File.SetAccessControl("C:\\TestDir1", fileSecurity);
            }

此代码导致异常:“无法设置标志。\r\n参数名称:inheritanceFlags”

可能出了什么问题?

【问题讨论】:

    标签: c# security


    【解决方案1】:

    得到了解决方案,显然我必须这样做:

    DirectoryInfo dirInfo = new DirectoryInfo("C:\\TestDir2");
                DirectorySecurity dirSecurity = dirInfo.GetAccessControl();
    
                dirSecurity.AddAccessRule(new FileSystemAccessRule("ASPNET", FileSystemRights.Write|FileSystemRights.DeleteSubdirectoriesAndFiles, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
    
    
                dirInfo.SetAccessControl(dirSecurity); 
    

    【讨论】:

    • 似乎除非使用现有的 FileSecurity 对象,否则设置继承标志不起作用?这并没有让测试变得更容易。
    【解决方案2】:

    正如您所指出的,最初的问题是您使用 FileSecurity 类(适用于文件,而不是目录)并尝试为目录设置 ACL,但这可能由于以下任何原因而发生还有:

    1. 目录设置规则时,您指定 InheritanceFlags.None 作为继承标志,但提供任何 传播标志的 PropagationFlags.None 以外的值 (您不能传播不存在的继承)。
    2. 文件 设置规则时,请指定除 InheritanceFlags.NonePropragationFlags.None 用于 各自的参数(文件不是容器,所以继承 无法指定)。

    您可以在source for the CheckFlags method 中看到 .NET Framework 所做的相关检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 2017-07-25
      • 1970-01-01
      • 2015-01-24
      • 2019-05-11
      相关资源
      最近更新 更多