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