移除所有目录权限

11
在C#(2.0)中,如何移除目录的所有权限,以便我可以限制访问。我会将访问权限添加回受限用户集合中。
4个回答

23
< p >免责声明:我意识到这个问题已经有答案并被接受了,我真的想把这个作为评论发布到被接受的答案中,但是无法对评论进行格式化,所以只能把它发表为答案(从技术上讲,这就是一个答案)......< /em >< /p > < p >我也想要做同样的事情,并找到了你的问题。 Stu的答案帮助我想出了这个解决方案。(请注意,我只对删除明确安全性感兴趣。)< /p >
private static DirectorySecurity RemoveExplicitSecurity(DirectorySecurity directorySecurity)
{
    AuthorizationRuleCollection rules = directorySecurity.GetAccessRules(true, false, typeof(System.Security.Principal.NTAccount));
    foreach (FileSystemAccessRule rule in rules)
        directorySecurity.RemoveAccessRule(rule);
    return directorySecurity;
}

这显然是用作下列内容:

DirectoryInfo directoryInfo = new DirectoryInfo(path);
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl();
directorySecurity = RemoveExplicitSecurity(directorySecurity);
Directory.SetAccessControl(path, directorySecurity);

一个完全有效的额外答案! - C. Ross
好的解决方案,但我认为你应该将其称为RemoveEXPLICIT而不是implicit,因为你在这里删除了显式规则。 - md1337
1
这应该被标记为正确答案。不需要免责声明。 - 101010
只是想为将来参考添加一点内容,这是一个很好的标准解决方案,但不足以处理某些权限。通过 GetAccessRules 返回的权限列表在传回 RemoveAccessRule 时并不总是有效的。当访问级别的值不存在于 FileSystemRights 枚举中时会发生这种情况,更多信息请参见此处 - https://dev59.com/xGkw5IYBdhLWcg3wus7K#9694894 - Josh G

8

我发现这个工具对于检查我的代码是否正常运行非常有用。它可以显示文件夹层次结构中设置的目录权限,即仅显示设置了权限的位置,而不是继承的位置 - http://www.youtube.com/watch?v=aZLIioUl-5k - pfeds

3

这里有一组关于Windows ACL编程的优秀文章,来自CodeProject:

Windows访问控制模型

系列的第三部分Part 3展示了.NET特定的方法。


2

使用System.IO.Directory.GetAccessControl()方法获取FileSecurity对象并进行编辑。


几乎一样^^我现在已经改了。 - codymanix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接