C#如何设置权限禁止普通用户向指定文件夹复制粘贴文件
解决方案
问题根源
- 你没有禁用目标文件夹的父级权限继承,C盘根目录给Users组的权限会自动继承到你创建的folder目录,额外的继承权限赋予了普通用户写入目录的能力。
- 你当前给Users组的权限规则没有严格限制写入操作的权限。
代码修改方案
你需要在设置自定义权限前先禁用父级权限继承,清除所有继承来的权限,再手动添加你需要的权限规则,修改后的完整代码如下:
static void Main(string[] args) { var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var directory = Directory.CreateDirectory(Path.Combine(path, "folder")); using (StreamWriter sw = new StreamWriter(Path.Combine(directory.FullName, "example.txt"))) { sw.WriteLine("hi"); } var directorySecurity = directory.GetAccessControl(); // 新增:禁用父级权限继承,删除所有已继承的权限规则 directorySecurity.SetAccessRuleProtection(isProtected: true, preserveInheritance: false); var administratorRule = new FileSystemAccessRule("Administrators", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow); // 调整Users组权限为明确的只读类权限,避免多余权限 var usersRole = new FileSystemAccessRule("Users", FileSystemRights.Read | FileSystemRights.ReadAndExecute | FileSystemRights.ListDirectory, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow); directorySecurity.AddAccessRule(administratorRule); directorySecurity.AddAccessRule(usersRole); directory.SetAccessControl(directorySecurity); }
关键修改说明
SetAccessRuleProtection方法的第一个参数设为true表示开启访问规则保护,禁止父级(如C盘根目录)的权限继承到当前文件夹;第二个参数设为false表示直接删除所有已经从父级继承来的权限规则,仅保留你手动添加的权限。- 调整Users组的权限为明确的只读、列出目录、读取执行权限,完全剔除写入、创建文件/文件夹、修改属性等操作权限,普通用户自然无法向该目录复制粘贴文件。
注意事项
如果你是手动将生成的folder目录复制到C盘根目录,Windows文件复制操作可能会重置权限继承规则,建议直接通过代码在目标路径(C盘根目录)创建文件夹并设置权限,避免复制操作导致权限配置失效。
内容的提问来源于stack exchange,提问作者rlnnclt
相关产品推荐
相关产品推荐

