我有winforms应用程序,其中我需要访问一个安全的目录。我使用模拟和创建WindowsIdentity来访问该文件夹。
我的问题是编写单元测试来测试目录安全性;我想编写一段代码,创建一个只保护一个用户的目录,这个用户不是运行UT的当前用户(否则测试将一文不值)。
我知道如何向某个用户添加权限,但如何拒绝其他用户,包括管理员?(如果运行UT的用户是管理员)(这样做是否明智?)
DirectoryInfo directoryInfo = new DirectoryInfo(path);
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl();
directorySecurity.AddAccessRule(new FileSystemAccessRule("Domain\SecuredUser",
FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.InheritOnly,
AccessControlType.Allow));
directorySecurity.RemoveAccessRule(new FileSystemAccessRule("??",
FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.InheritOnly,
AccessControlType.Deny));
directoryInfo.SetAccessControl(directorySecurity);这不管用。我不知道我该拒绝谁。域\管理员、域\管理员、我...没有人被拒绝,并且当我检查文件夹的安全性时-即使我指定了FullControl,SecuredUser也可以访问该文件夹,但权限不会被检查。
基本上,我想对此进行编码:
<authorization>
<allow users ="Domain\User" />
<deny users="*" />
</authorization>我在考虑用一个没有权限的弱用户模拟UT run,但这会导致: Impersonate -> Run UT -> Impersonate -> Access文件夹,我不确定这是不是正确的设计。
非常感谢您的帮助,谢谢。
发布于 2010-06-08 12:55:17
我不确定这一点,但我认为deny优先于allow。因此,如果您尝试拒绝每个人的权限(使用组"Everyone"),它可能会覆盖您试图授予其访问权限的特殊用户的权限。
应该做的是删除所有现有的访问权限,然后添加允许特殊用户访问的单个规则。
发布于 2010-06-08 02:06:00
我刚刚测试了来自http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.setaccesscontrol%28v=VS.100%29.aspx的msdn示例代码,我得到了同样的问题。当我一步一步调试示例程序时,添加的访问权限只是“特殊权限”,而不是程序中指定的"readdata“。
更新:在Windows7中,在文件安全属性->高级->Effective权限下,权限显示为通告。“特殊权限”上的勾号实际上具有误导性。
Update2 :如果使用包含五个参数的构造函数,并将标志设置为"InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit“和"PropagationFlags.InheritOnly",则访问权限将完全按照添加的方式显示在安全选项卡中。似乎只有当权限在每个子目录下继承和传播时,安全选项卡中的长访问列表才会被勾选。
发布于 2011-07-17 12:07:48
您是否考虑帐户组“{domainName}\域用户”?拒绝访问该组应拒绝指定域中所有用户的访问权限。
https://stackoverflow.com/questions/2990556
复制相似问题