删除所有默认文件权限

本文关键字:文件 权限 默认 删除 | 更新日期: 2023-09-27 18:31:04

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

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

删除所有默认文件权限

我想

通了。

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

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

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

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

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

点击这里查看暗示