【发布时间】:2012-01-18 19:12:59
【问题描述】:
我有一个文件夹,它有一些严格的限制。对于一个用户,此人可以查看文件是否存在,但无法复制文件、打开文件等。他们唯一能做的就是查看文件是否存在。
当我查看顶层时,我看到列表文件夹内容被选中。这是他们被允许拥有的唯一权限。
现在,当使用 C# 提取权限时,我看到设置了几个项目,而不仅仅是一个。而当我深入查看权限时,我看到在这个较低的级别,检查了相应的项目。
当我获得此文件夹的权限时,它显示该文件夹具有“读取”访问权限,因为设置了读取的低级标志。但是,我已经使用该用户的帐户进行了测试。他们肯定没有读取权限。
如果我重新创建一个新文件夹并设置此处列出的权限,则用户可以将文件从新文件夹中复制出来,这是他们无法做到的。
我不了解 Windows 安全模型。
如何验证用户是否具有 LIST 访问权限,但没有 READ 访问权限?我要具体查询什么?注意:查询“列出文件夹/读取数据”而不是“读取权限”不起作用,如下所示。这两个显然是由更高级别的“列出文件夹内容”选项设置的。
更新:
我包含用于提取信息的代码片段。也许这将有助于定义我在寻找什么。
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;
}
【问题讨论】:
标签: c# file-permissions