2009-09-18 98 views
11

在C#中(2.0)如何删除目录的所有权限,以便限制访问权限。我将把访问权限添加回有限的一组用户。删除所有目录权限

回答

8

查看System.Security.AccessControl命名空间中的类,特别是DirectorySecurity.RemoveAccessRule方法。

此外,如果删除了所有的权限,那么你将不能够添加任何回之后:-)

+0

我发现这个工具对检查我的代码工作确实很有用。它显示您在文件夹层次结构中设置的目录权限。即只在权限设置的地方,而不是继承 - http://www.youtube.com/watch?v=aZLIioUl-5k – pfeds 2013-09-09 04:02:49

2

System.IO.Directory.GetAccessControl()然后编辑返回的FileSecurity对象。

+0

目录budy。 – 2009-09-18 15:57:39

+0

差不多^^我现在改了它。 – codymanix 2009-09-18 16:11:00

20

免责声明:我知道这已经回答了,接受了,我真的想后这作为评论接受的答案,但无法格式评论迫使我张贴这个答案(这在技术上,它是)... ...

我正在寻找做的相同,并找到你的问题。 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); 
+0

完全有效的附加答案! – 2010-11-10 16:24:25

+0

良好的解决方案,但我认为你应该把它称为RemoveEXPLICIT不隐含,因为你在这里删除明确的规则。 – md1337 2012-03-07 18:18:52

+0

@ md1337谢谢,编辑帖子,以体现这一点。 – Bryan 2012-09-02 19:38:07