2009-09-18 138 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