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

Q8Y*_*Q8Y 9 .net c# 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);
Run Code Online (Sandbox Code Playgroud)

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

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

注意:当我以手动方式进行其工作时,当使用编码方式时.它不起作用......

我希望你能帮助我......

非常感谢

San*_*der 9

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

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

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


小智 5

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

        }
Run Code Online (Sandbox Code Playgroud)

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