我有一个文件夹,它有一些严格的限制。对于一个用户,这个人可以看到文件是否存在,但不能复制文件,打开文件等等。他们能做的唯一的事情就是看文件是否存在。FileSystemRights:仅列表文件夹
当我看顶层,我看到列出文件夹内容进行检查。这是他们被允许拥有的唯一权限。现在
,当使用C#拉权利,我看到几个项目设置,不只是一个。当我更深入地看待权利时,我发现在这个较低的层次上,相应的项目被检查。
当我得到的权利,这个文件夹,它显示因为读了低级别的标志设置该文件夹具有“读”访问。但是,我已经用此用户的帐户进行了测试。他们肯定没有阅读权限。
如果我重新创建一个新的文件夹,并设置为这里列出的权限,然后用户可以将文件复制出来的新文件夹,他们不应该是能够做到的。
我不理解Windows安全模式。
我如何验证用户具有列表访问,但不读访问?我会特别查询什么?注意:查询“列出文件夹/读取数据”而不是“读取权限”不起作用,如下所示。这两者显然都是由更高级别的“列出文件夹内容”选项设置的。
UPDATE:
我包括代码剪断我用拉的信息。也许这将有助于确定我在找什么。
internal void GroupsFromPath(string pth, bool IncludeInherited)
{
DirectorySecurity ds;
try
{
DirectoryInfo di = new DirectoryInfo(pth);
ds = di.GetAccessControl(AccessControlSections.Access);
}
catch
{
return ret;
}
AuthorizationRuleCollection acl = ds.GetAccessRules(true,
IncludeInherited, typeof(NTAccount));
foreach (FileSystemAccessRule ace in acl)
{
bool L = CheckRights(ace, FileSystemRights.Traverse |
FileSystemRights.ListDirectory);
bool R = CheckRights(ace, FileSystemRights.Read);
bool W = CheckRights(ace, FileSystemRights.Modify);
DO_MAGIC(pth, L, R, W);
}
}
private bool CheckRights(FileSystemAccessRule ACE,
FileSystemRights fileSystemRights)
{
bool r = ((ACE.FileSystemRights & fileSystemRights) == fileSystemRights)
&& (ACE.AccessControlType == AccessControlType.Allow);
return r;
}
我不想改变价值。我正在尝试获取已经在ACE中的值。我不明白你的陈述如何适用于这种情况。 – Jerry
@Jerry:我已经更新了我的答案。您可以使用PropagationFlags和InheritanceFlags检查“仅列出文件夹内容”权限。 – Hans
说实话,这对我来说没有任何意义,但它确实会返回正确的价值。当我使用相同的模式来检查READ和WRITE时,它会返回相应的真/假值。谢谢!! – Jerry