【发布时间】:2014-02-26 18:20:58
【问题描述】:
以下代码为组 G-Test 设置文件夹“\\myShare\Folder1\”的“读取”权限:
String gName="G-Test";
AclEntryPermission[] aeps=new AclEntryPermission[]{
AclEntryPermission.READ_DATA,
AclEntryPermission.READ_ATTRIBUTES,
AclEntryPermission.READ_NAMED_ATTRS,
AclEntryPermission.READ_ACL,
AclEntryPermission.SYNCHRONIZE
};
Path p = FileSystems.getDefault().getPath(new File("\\\\myShare\\Folder1\\").getPath());
AclFileAttributeView view = Files.getFileAttributeView(p, AclFileAttributeView.class);
Set<AclEntryPermission> set = EnumSet.noneOf(AclEntryPermission.class);
for (AclEntryPermission acp: aeps) set.add(acp);
AclEntry.Builder b= AclEntry.newBuilder();
b.setType(AclEntryType.ALLOW);
b.setPermissions(set);
b.setPrincipal(FileSystems.getDefault().getUserPrincipalLookupService().lookupPrincipalByName(gName));
b.setFlags(new AclEntryFlag[]{AclEntryFlag.FILE_INHERIT,AclEntryFlag.DIRECTORY_INHERIT});
List<AclEntry> acl = view.getAcl();
acl.add(b.build());
view.setAcl(acl);
这适用于文件夹 1,如预期的那样。但是在 Folder2(子文件夹:\\myShare\Folder1\Folder2)上,ACL 没有被继承。使用 Windows GUI 查看时,Folder2 中缺少继承的 ACL。
在使用 Windows 为 Folder1 中的另一个组/权限更改 ACL 时,我可以看到以前在 folder2 上缺少的权限。或者在创建新的子文件夹时,ACL 是正确继承的。
上面的代码有问题吗?我想在 folder1 上设置读取权限,该权限被继承到所有子文件夹和文件。
代码在 Windows 8.1 PC 上运行,共享是 Windows 2008 R2 文件 - 集群
【问题讨论】:
标签: java file-permissions