创建目录并设置AccessRules(权限)时权限详情为空问题
问题原因及解决方法
你遇到的问题是因为创建FileSystemAccessRule时缺少了继承和传播规则的参数。默认构造函数只指定了用户、权限类型和允许/拒绝控制,但没有定义权限的作用范围(比如是否应用到目录本身、是否传递给子目录和文件),导致系统无法正确识别权限的有效范围,最终表现为权限列表里有用户条目,但权限详情为空。
修复后的代码
修改FileSystemAccessRule的实例化逻辑,补充继承和传播参数即可解决:
public static Result CreateDirectory(string path) { try { if (!System.IO.Directory.Exists(path)) { DirectoryInfo directoryInfo = System.IO.Directory.CreateDirectory(path); directoryInfo.Attributes = FileAttributes.Normal; DirectorySecurity sec = directoryInfo.GetAccessControl(); // 补充继承与传播规则参数,明确权限作用范围 var accessRule = new FileSystemAccessRule( Environment.UserDomainName + "\\" + Environment.UserName, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow ); sec.AddAccessRule(accessRule); directoryInfo.SetAccessControl(sec); } return new Result(); } catch (Exception ex) { return new Result(exception: ex, sendMail: true); } }
关键参数说明
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit:指定权限会同时应用到当前目录、目录下的子目录(容器)和文件(对象)PropagationFlags.None:表示权限会正常向下传播,不限制传播范围
添加这两个参数后,系统就能正确识别权限的作用范围,权限详情里就会显示完整的FullControl权限条目。
内容的提问来源于stack exchange,提问作者dns_nx
相关产品推荐
相关产品推荐

