Мне удалось имитировать разрешения для файла свойств Windows, создав папку, которую я хотел имитировать, задав значения в диалоговом окне «Свойства», а затем вернув их обратно ...
// Echo ACL
Path path = Paths.get("C:\\myfolder");
UserPrincipal authenticatedUsers = path.getFileSystem().getUserPrincipalLookupService()
.lookupPrincipalByName("Authenticated Users");
AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class);
for(AclEntry entry : view.getAcl()) {
if(entry.principal().equals(authenticatedUsers)) {
System.out.println("=== flags ===");
for (AclEntryFlag flags : entry.flags()) {
System.out.println(flags.name());
}
System.out.println("=== permissions ===");
for (AclEntryPermission permission : entry.permissions()) {
System.out.println(permission.name());
}
}
}
Вывод:
=== flags ===
DIRECTORY_INHERIT
FILE_INHERIT
=== permissions ===
WRITE_NAMED_ATTRS
WRITE_ATTRIBUTES
DELETE
WRITE_DATA
READ_ACL
APPEND_DATA
READ_ATTRIBUTES
READ_DATA
EXECUTE
SYNCHRONIZE
READ_NAMED_ATTRS
Затем я смог вставить эти значения обратно в свой исходный пример:
UserPrincipal authenticatedUsers = path.getFileSystem().getUserPrincipalLookupService()
.lookupPrincipalByName("Authenticated Users");
AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class);
// Create ACL to give "Authenticated Users" "modify" access
AclEntry entry = AclEntry.newBuilder()
.setType(AclEntryType.ALLOW)
.setPrincipal(authenticatedUsers)
.setFlags(DIRECTORY_INHERIT,
FILE_INHERIT)
.setPermissions(WRITE_NAMED_ATTRS,
WRITE_ATTRIBUTES,
DELETE,
WRITE_DATA,
READ_ACL,
APPEND_DATA,
READ_ATTRIBUTES,
READ_DATA,
EXECUTE,
SYNCHRONIZE,
READ_NAMED_ATTRS)
.build();
... и теперь «Изменить» проверяется точно так, как нужно.