我需要使用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”的安全属性时,它没有检查“写入”权限复选框,而是检查了“特殊权限” ...我注意到即使我将访问权限从写入更改为完全控制或读取,它也检查了“特殊权限”一个....
这不是问题:),问题是它没有给予我给它的正确访问权限...当我给它写时,它不会像我给它的写权限一样。我不知道为什么!!我做错了吗?
注意: 当我以手动的方式做它的工作时,当使用编码方式时。它不起作用......
我希望你能帮助我...
非常感谢
答案 0 :(得分:8)
我知道你的痛苦 - 文件系统ACL很难修改,即使它似乎有用,但在某些情况下可能会破坏。在你的情况下,幸运的是,有一个简单的解决方案。
问题在于PropagationFlags.InheritOnly
。这意味着此权限仅应用于继承权限的项目 - 例如您仅为此目录中的文件授予权限,而不是在任何子目录中。
要授予继承“正常”的目录权限(即传播到子目录和所有文件),请对InheritanceFlags和PropagationFlags使用以下值:
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit
和PropagationFlags.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);
}
上述代码会将文件夹的访问权限设置为对每个用户(每个人)进行完全控制/读写。