DirectorySecurity设置特殊权限,而FileSecurity则不设置

Log*_*gan 9 .net c# permissions implementation

检查以下两个代码块:

System.Security.AccessControl.DirectorySecurity dsec = System.IO.Directory.GetAccessControl(str);
System.Security.Principal.NTAccount group= new System.Security.Principal.NTAccount("DOMAIN","USERGROUP");
System.Security.AccessControl.FileSystemAccessRule myrule = new System.Security.AccessControl.FileSystemAccessRule(group,System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.AccessControlType.Allow);
dsec.SetAccessRule(myrule);
System.IO.Directory.SetAccessControl(str,dsec);
Run Code Online (Sandbox Code Playgroud)

System.Security.AccessControl.FileSecurity fsec = System.IO.File.GetAccessControl(file);
System.Security.Principal.NTAccount group= new System.Security.Principal.NTAccount("DOMAIN","USERGROUP");
System.Security.AccessControl.FileSystemAccessRule myrule = new System.Security.AccessControl.FileSystemAccessRule(group,System.Security.AccessControl.FileSystemRights.FullControl, System.Security.AccessControl.AccessControlType.Allow);
fsec.SetAccessRule(myrule);
System.IO.File.SetAccessControl(file,fsec);
Run Code Online (Sandbox Code Playgroud)

人们会期望他们两者完全相同,只有一个到目录,一个到文件.并且,在某些方面,他们这样做.在这两种情况下,有问题的文件系统对象都会更改,以使DOMAIN\USERGROUP具有完全控制的有效权限.

但是,奇怪的是,当您右键单击文件并查看安全性时,您会看到: 文件安全选项卡

当您右键单击文件夹并查看安全性时,您会看到: 文件夹安全选项卡

如果我然后转到高级 - >有效权限 - >选择(DOMAIN\USERGROUP),它会显示该组文件夹的有效权限是完全控制(选中所有框,而不仅仅是完整控制框那甚至更奇怪了.

我的问题是,为什么几乎相同的实现的效果有差异,有没有人知道如何复制应用权限到文件的效果?

Sni*_*tor 12

不同之处在于传播标志与目录安全性的相关性.

var accessRule = new FileSystemAccessRule(
    identity: group,
    fileSystemRights: FileSystemRights.FullControl,
    type: AccessControlType.Allow,
    inheritanceFlags: InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
    propagationFlags: PropagationFlags.None);
Run Code Online (Sandbox Code Playgroud)

请注意inheritanceFlags设置.如果未指定,则默认为none,将其归类为"special".