2011-05-23 70 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); 

     } 

上面的代码将设置文件夹的访问权限,完全控制/读写每个用户(每个人)。