我在创建具有特定权限的目录时遇到问题。
//Make sure Tools directory exists
DirectoryInfo oMyDirectoryInfo = new DirectoryInfo(oInstance.szToolsPath);
if (!oMyDirectoryInfo.Exists)
{
oMyDirectoryInfo.Create();
DirectorySecurity oDirectorySecurity = oMyDirectoryInfo.GetAccessControl();
oDirectorySecurity.AddAccessRule(new FileSystemAccessRule((Settings.Default.LoginDomain + "\\" + Settings.Default.LoginUsername), FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
oMyDirectoryInfo.SetAccessControl(oDirectorySecurity);
}
现在创建目录,我可以看到Login已添加到安全选项卡中。但是,当我冒充登录并尝试将文件复制到该目录时,我收到了一个未经授权的例外。我可以创建一个文件(没有数据),我可以创建一个文件夹,但我无法将数据写入文件(但我设置了FullControl:/)
我通过Windows进一步挖掘了权限,我发现它适用于子文件夹,但我也想将其设置为文件。我如何通过代码完成此操作?
这是在Windows 7上
答案 0 :(得分:6)
在创建FileSystemAccessRule
时,您指定的是InheritanceFlags.ContainerInherit
。这会将掩码传播到子容器。如果要应用于叶对象(在您的情况下为文件),则需要指定InheritanceFlags.ObjectInherit
,或同时指定两者,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit
答案 1 :(得分:0)
使用此选项添加访问规则
string adminUserName = Environment.UserName;
DirectorySecurity dirService = Directory.GetAccessControl(directory + hexID);
FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName,FileSystemRights.FullControl, AccessControlType.Deny);
dirService.AddAccessRule(fsa);//add
Directory.SetAccessControl(directory + hexID, dirService);
并使用此功能删除访问规则
string adminUserName = Environment.UserName;
DirectorySecurity dirService = Directory.GetAccessControl(directory + hexID);
FileSystemAccessRule fsa = new FileSystemAccessRule(adminUserName, FileSystemRights.FullControl, AccessControlType.Deny);
dirService.RemoveAccessRule(fsa);//remove
Directory.SetAccessControl(directory + hexID, dirService);