C# 文件/目录权限

16

我正在编写一个应用程序来管理用户对文件的访问权限。简短版的故事是,我必须使用目录和文件权限来实现它。我们公司没有适合我们廉价CEO使用的文档管理系统...

无论如何...除了用户可以查看目录中的文件但不能实际查看文件内容的情况外,我已经做好了所有工作。(文件中可能包含敏感的人力资源数据。)

我尝试了FileSystemRights.ListDirectory,但这似乎(尽管在MS文档中)也将ReadData设置为true。我关闭了ReadData(即读取文件的能力),突然又无法访问目录了。两者似乎是相关联的。

有什么想法可以设置哪些权限来实现这一点吗?

我的当前代码是:

SetSecurity(pth, usr, FileSystemRights.ListDirectory, AccessControlType.Allow);

...

public void SetSecurity(string dirName, string account,
    FileSystemRights rights, AccessControlType controlType)
{
    // Get a FileSecurity object that represents the
    // current security settings.
    DirectorySecurity dSecurity = Directory.GetAccessControl(dirName);

    dSecurity.AddAccessRule(new FileSystemAccessRule(account, rights, controlType));

    // Set the new access settings.
    Directory.SetAccessControl(dirName, dSecurity);
}

感谢。

--Jerry

4个回答

7

FileSystemRights枚举将ReadData和ListDirectory都映射到值1,因此.NET认为这两个值是完全等效的。

你是否尝试过使用Traverse而不是ListDirectory?

编辑:根据这篇文章,Windows XP也认为它们是相同的,只是一个仅适用于文件,另一个仅适用于目录。

编辑2:只要您将ReadData / ListDirectory访问规则设置为不被子对象继承,就可以将其应用于目录而不将其应用于目录中的文件。 FileSystemAccessRule类支持更改继承标志。


3

是的。这些文件确实继承自文件夹。这又是我们必须解决的“CEO拒绝购买真正的文档管理解决方案”问题。 - Jerry
在特定文件夹上进行无继承测试后,您是正确的。您可以启用文件夹,然后禁用文件本身,它将按预期工作...但出于其他原因,这对我们来说不是一个选项。 - Jerry

1

没错。Traverse(我认为它的名称不准确)允许我在文件夹内执行程序,但无法查看文件夹的内容。说实话,我不确定这有什么用。

我即将告诉CEO这是不可能的,并再次看到火花四溅。:P


2
能够绕过遍历检查使文件访问的复杂度从O(n)变为O(1)。想象一下尝试打开100个嵌套在12个目录深度中的文件。如果你可以绕过遍历检查,你只需要进行100个ACL检查;如果不能,你必须执行1200个检查。 - Gabe

0

在实例化FileSystemAccessRule时,未设置继承和传播值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接