4

我有一个 C# 网络应用程序,它会提示管理员输入网络代理身份验证信息。我询问用户是否要保存此信息,如果他们选择是,我会在用户的唯一本地文件中加密。然后,我想删除除创建它的用户之外的所有文件权限,但所有其他用户都能够删除该文件。

现在,我在下面找到了 MS 文章,但如果我不知道一开始就在文件上设置的默认用户,那也无济于事。是否有删除所有文件权限?然后,我可以添加我想要设置的个人权限以供当前用户完全访问,并删除“所有用户”或“经过身份验证的用户”的权限,这取决于 Windows 的版本。 http://msdn.microsoft.com/en-us/library/system.io.file.setaccesscontrol.aspx

4

3 回答 3

10

我想到了..

    public void SetFileSecurity(String filePath, String domainName, String userName)
    {
        //get file info
        FileInfo fi = new FileInfo(filePath);

        //get security access
        FileSecurity fs = fi.GetAccessControl();

        //remove any inherited access
        fs.SetAccessRuleProtection(true, false);

        //get any special user access
        AuthorizationRuleCollection rules = fs.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));

        //remove any special access
        foreach (FileSystemAccessRule rule in rules)
            fs.RemoveAccessRule(rule);

        //add current user with full control.
        fs.AddAccessRule(new FileSystemAccessRule(domainName + "\\" + userName, FileSystemRights.FullControl, AccessControlType.Allow));

        //add all other users delete only permissions.
        fs.AddAccessRule(new FileSystemAccessRule("Authenticated Users", FileSystemRights.Delete, AccessControlType.Allow));

        //flush security access.
        File.SetAccessControl(filePath, fs);
    }
于 2013-09-11T13:30:55.940 回答
0

如果需要针对特定​​组进行移除,可以使用此方法;

public static void RemoveGroupPermission(string path, string group_name)
{
      long begin = Datetime.Now.Ticks;

      DirectoryInfo dirInfo = new DirectoryInfo(path);

      DirectorySecurity dirSecurity = dirInfo.GetAccessControl();

      dirSecurity.RemoveAccessRuleAll(new FileSystemAccessRule(Environment.UserDomainName +
                                                              @"\" + group_name, 0, 0));

      dirInfo.SetAccessControl(dirSecurity);

      long end = DateTime.Now.Ticks;

      Console.WriteLine("Tick : " + (end - begin));

}
于 2018-03-27T14:19:50.580 回答
-1

模仿可能会帮助您解决这个问题。

编程上下文中的术语“模拟”是指在与最初启动应用程序的用户不同的用户上下文下执行代码的技术,即在应用程序执行期间用户上下文临时更改一次或多次。

点击这里查看实施

于 2013-09-11T12:25:46.210 回答