删除所有默认文件权限

时间:2013-09-11 12:12:09

标签: c# file permissions

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

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

3 个答案:

答案 0 :(得分:6)

我想出来了..

    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);
    }

答案 1 :(得分:0)

假冒可能会帮助您解决这个问题。

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

点击Here查看投诉

答案 2 :(得分: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));

}
相关问题