gpt4 book ai didi

c# - 如何查看文件或文件夹是否未选中 "include inheritable permissions"?

转载 作者:可可西里 更新时间:2023-11-01 13:11:45 32 4
gpt4 key购买 nike

我正在用 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 的对象使用上述方法似乎很草率。因此,我想确定哪些对象的权限继承已关闭,但我似乎无法找到返回此信息的相应方法或属性。有吗?我在这里遗漏了什么吗?

最佳答案

我记得我用过这样的东西:

DirectoryInfo d = new DirectoryInfo(@"e:\test1");
DirectorySecurity acl = d.GetAccessControl();
if (acl.GetAccessRules(false, true, typeof(System.Security.Principal.SecurityIdentifier)).Count >0)
// -- has inherited permissions
else
// -- has no inherited permissions

我也试图找到一种方法来检查这一点,但我找不到任何方法(即使在 C++ 中)。所以我最终使用了上面的代码。它就像一个魅力。

关于c# - 如何查看文件或文件夹是否未选中 "include inheritable permissions"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082320/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com