当用户完全控制时,现有用户被覆盖 - 为什么?以及如何删除继承组的访问权限? C#

时间:2014-05-02 15:06:33

标签: c# file permissions add

我有一个txt文件,其中包含用户列表。我希望这些用户被授予对文件/目录的完全访问权限,然后从文件中删除所有其他权限。这是我用来给用户完全控制列表的代码:

    var readerAdminUsers = new StreamReader(File.OpenRead(adminFile));
    string adminUser = string.Empty;
    var allAdminUsers = new List<String>();
    FileSystemAccessRule fsar;
    FileSecurity fileSec = new FileSecurity();

    while (!readerAdminUsers.EndOfStream)
    {
        var line = readerAdminUsers.ReadLine();
        adminUser = line;
        allAdminUsers.Add(adminUser);

        fsar = new FileSystemAccessRule(adminUser, FileSystemRights.FullControl, AccessControlType.Allow);
        fileSec.AddAccessRule(fsar);
        numOfAdmins++;
    }

    File.SetAccessControl(filePath, fileSec);

但是,一旦设置了访问控制,我添加到文件中的任何其他用户(不在管理列表中)都已被删除!但是继承的组(例如管理员和系统组)仍然具有权限。是什么导致此删除用户?

然后我遇到的问题是,当我尝试删除那些继承的群组时,他们仍然在那里,我无法弄清楚如何删除它们。这是该部分的代码:

    FileAttributes attr = File.GetAttributes(filePath);
    if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
    {
        var security = Directory.GetAccessControl(filePath);
        arc = security.GetAccessRules(true, true, typeof(NTAccount));
    }
    else
    {
        var security = File.GetAccessControl(filePath);
        arc = security.GetAccessRules(true, true, typeof(NTAccount));
    }

    foreach (FileSystemAccessRule rule in arc)
    {
        string username = rule.IdentityReference.Value;               
        if (!allAdminUsers.Contains(username))
        {
            fileSec.RemoveAccessRule(rule);
            File.SetAccessControl(filePath, fileSec);        
        }
    }

我从一个文件开始,例如:
- 我添加了3个用户 - 和继承的系统和管理员组

最后我想要的是:
- 没有用户(除非他们是txt文件中指定的管理员之一)
- 没有用户组
- 以及完全控制的文件中的管理员

我得到的是:
- 3个用户已经离开了 - 继承的群体仍然存在 - 并且管理员用户具有完全控制权

请注意,添加拒绝访问权限并非我所寻求的,我需要将其完全删除。

请帮我解决这个问题! 非常感谢:))

0 个答案:

没有答案