1

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

这是行不通的。我不知道我应该否认谁。Domain\Admins,Domain\Administrators,我......没有人被拒绝,当我检查文件夹的安全性时 - SecuredUser 有权访问文件夹,但没有检查权限,即使我指定了 FullControl。

基本上我想编码这个:

<authorization>
 <allow users ="Domain\User" />
 <deny users="*" /> 
</authorization>

我正在考虑用没有权限的弱用户模拟 UT 运行,但这会导致:模拟 -> 运行 UT -> 模拟 -> 访问文件夹,我不确定这是否是正确的设计。

非常感谢您的帮助,谢谢。

4

3 回答 3

2

我不确定这一点,但我认为拒绝优先于允许。因此,如果您尝试拒绝所有人的权限(使用组“Everyone”),它可能会覆盖您尝试授予访问权限的特殊用户的权限。
应该起作用的是删除所有现有的访问权限,然后添加允许特殊用户访问的单个规则。

于 2010-06-08T04:55:17.047 回答
1

我刚刚从http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.setaccesscontrol%28v=VS.100%29.aspx测试了 msdn 示例代码,我遇到了同样的问题。当我一步步调试示例程序时,添加的访问权限只是“特殊权限”,而不是程序中指定的“readdata”。
更新:在 Windows 7 中,在文件 -> 属性 -> 安全 -> 高级 -> 有效权限下,权限显示为广告。“特殊权限”上的勾号实际上具有误导性。
Update2 :如果您使用五参数构造函数并将标志设置为“InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit”和“PropagationFlags.InheritOnly”,则访问权限将完全按照添加的方式显示在安全选项卡中。似乎只有在每个子目录下继承和传播权限时,才会勾选安全选项卡中的一长串访问权限。

于 2010-06-07T18:05:59.593 回答
0

您是否考虑过帐户组“{domainName}\Domain Users”?拒绝访问该组应该拒绝访问指定域中的所有用户。

于 2011-07-17T04:07:47.787 回答