2011-05-23 67 views
6

我需要使用C#給文件夾「臨時ASP.NET文件」寫入權限...我使用此代碼給它的接入如何授予權限在C#中的文件夾?

DirectoryInfo d1 = new DirectoryInfo(Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "Temporary ASP.NET Files")); 
      DirectorySecurity md1 = d1.GetAccessControl(); 


      string user_1 = fa.TextGuestDomain + "\\" + fa.TextGuestUser; 
      md1.AddAccessRule(new FileSystemAccessRule(user_1, FileSystemRights.FullControl,InheritanceFlags.ObjectInherit,PropagationFlags.InheritOnly, AccessControlType.Allow)); 

      d1.SetAccessControl(md1); 

當我檢查該文件夾的安全屬性「臨時ASP.NET文件」實施後的代碼,它沒有檢查「寫入」權限複選框,而不是它選中了「特殊權限」一......我注意到,甚至當我改變了訪問從完全控制寫入或讀取,它選中了「特殊權限」一....

這是沒有問題的:),問題是它不能做出正確的訪問,我給它......當我給它寫,它不是如果我給它的寫權限。我不知道爲什麼!我做錯了嗎?

注:當我在手動方式做 其工作,使用的編碼方式,當一段時間。它不工作...

我希望你能幫助我與...

非常感謝

回答

7

我知道你的痛苦 - 文件系統ACL是一個痛苦的修改,甚至如果它似乎工作,在某些情況下可能會打破。在你的情況下,有一個簡單的解決方案,幸運的。

問題在於PropagationFlags.InheritOnly。這意味着這個權限是只有適用於繼承權限的項目 - 例如您僅爲此目錄中的文件授予權利,並且不在任何子目錄中

要授予繼承「正常」目錄權限(即傳播到子目錄和所有文件),請使用以下值InheritanceFlags和PropagationFlags: InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInheritPropagationFlags.None

+0

謝謝soooooooooooooooo多:) 它確實工作;) – Q8Y 2011-05-23 10:47:35

0
private static void GrantAccess(string file) 
     { 
      bool exists = System.IO.Directory.Exists(file); 
      if (!exists) 
      { 
       DirectoryInfo di = System.IO.Directory.CreateDirectory(file); 
       Console.WriteLine("The Folder is created Sucessfully"); 
      } 
      else 
      { 
       Console.WriteLine("The Folder already exists"); 
      } 
      DirectoryInfo dInfo = new DirectoryInfo(file); 
      DirectorySecurity dSecurity = dInfo.GetAccessControl(); 
      dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); 
      dInfo.SetAccessControl(dSecurity); 

     } 

上面的代碼將設置文件夾的訪問權限,完全控制/讀寫每個用戶(每個人)。