如何为c#中的文件夹授予权限?

时间:2011-05-23 09:36:47

标签: c# .net security permissions file-permissions

我需要使用c#给文件夹“Temporary ASP.NET Files”一个写入权限...我使用此代码为其提供访问权限

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);

当我在实现代码后检查文件夹“Temporary ASP.NET Files”的安全属性时,它没有检查“写入”权限复选框,而是检查了“特殊权限” ...我注意到即使我将访问权限从写入更改为完全控制或读取,它也检查了“特殊权限”一个....

这不是问题:),问题是它没有给予我给它的正确访问权限...当我给它写时,它不会像我给它的写权限一样。我不知道为什么!!我做错了吗?

注意: 当我以手动的方式做它的工作时,当使用编码方式时。它不起作用......

我希望你能帮助我...

非常感谢

2 个答案:

答案 0 :(得分:8)

我知道你的痛苦 - 文件系统ACL很难修改,即使它似乎有用,但在某些情况下可能会破坏。在你的情况下,幸运的是,有一个简单的解决方案。

问题在于PropagationFlags.InheritOnly。这意味着此权限应用于继承权限的项目 - 例如您仅为此目录中的文件授予权限,而不是在任何子目录中

要授予继承“正常”的目录权限(即传播到子目录和所有文件),请对InheritanceFlags和PropagationFlags使用以下值: InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInheritPropagationFlags.None

答案 1 :(得分:2)

  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);

        }

上述代码会将文件夹的访问权限设置为对每个用户(每个人)进行完全控制/读写。