【发布时间】:2012-04-22 08:44:00
【问题描述】:
我正在用 C# 编写一个小实用程序,以确保指定的文件夹及其所有内容都具有适当的访问权限(我想授予 Authenticated Users 组完全访问权限)。以下代码似乎可以正常更新顶级文件夹的 ACL(访问控制列表):
SecurityIdentifier allUsers = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null);
InheritanceFlags iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
FileSystemAccessRule newRule = new FileSystemAccessRule(allUsers,
FileSystemRights.FullControl, iFlags,
PropagationFlags.None, AccessControlType.Allow);
DirectoryInfo info = new DirectoryInfo(folderPath);
DirectorySecurity security = info.GetAccessControl();
security.AddAccessRule(newRule);
info.SetAccessControl(security);
但是,我注意到,此新访问规则不会传播到在其安全属性中未选中“包括可继承权限...”选项的子文件夹。这才有意义。所以,我想做的是为任何此类子文件夹重新启用安全权限继承。
我的挖掘发现了ObjectSecurity.SetAccessRuleProtection 方法,它应该是我需要的一半。但是,对已经继承了其父 DACL 的对象盲目地使用上述方法似乎很草率。因此,我想确定哪些对象的权限继承已关闭,但我似乎找不到返回此信息的相应方法或属性。有吗?我在这里遗漏了什么吗?
【问题讨论】:
-
如果父文件夹已经设置了它为什么重要?重新设置它不应该引起任何悲伤。
-
@M.Babcock – 出于实际原因,强制更新不需要更新的文件或文件夹似乎既浪费又低效。在我的具体情况下,只有少数子文件夹不 继承访问权限,但在这些相同的文件夹中 有数百甚至数千个文件。出于性能原因,我宁愿更新这些对象中的少数而不是全部。
-
虽然不是重复的,但它是stackoverflow.com/questions/6574196/…的倒数
标签: c# .net windows permissions filesystems