【发布时间】:2010-11-29 13:04:47
【问题描述】:
在 C# (2.0) 中,如何删除对目录的所有权限,以便限制访问。我将为有限的一组用户添加访问权限。
【问题讨论】:
标签: c# .net security permissions
在 C# (2.0) 中,如何删除对目录的所有权限,以便限制访问。我将为有限的一组用户添加访问权限。
【问题讨论】:
标签: c# .net security permissions
免责声明:我意识到这已经得到了回答和接受,我真的很想将其作为对已接受答案的评论发布,但是无法格式化 cmets 迫使我将其发布为答案(从技术上讲,它是)....
我也想做同样的事情,但发现了你的问题。 Stu 的回答帮助我想出了这个解决方案。 (请注意,我只对删除显式安全感兴趣)。
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);
【讨论】:
GetAccessRules 返回的权限列表在传回 RemoveAccessRule 时并不总是有效的。这发生在FileSystemRights 枚举中不存在访问级别的值,更多信息在这里 - *.com/questions/9694834/…
System.IO.Directory.GetAccessControl() 然后编辑返回的 FileSecurity 对象。
【讨论】:
查看System.Security.AccessControl 命名空间中的类,尤其是DirectorySecurity.RemoveAccessRule 方法。
此外,如果您删除所有权限,那么您将无法再添加任何权限 :-)
【讨论】:
这里有一组来自 CodeProject 的关于 Windows ACL 编程的精彩文章:
The Windows Access Control Model
系列中的Part 3 展示了.NET 特定的方法。
【讨论】: