【发布时间】:2023-04-09 21:24:01
【问题描述】:
如何使用 Java 7 的文件 API 设置 Windows ACL,以便模拟添加用户/组和以下选项:
例如,在操作系统属性对话框中,您可以选择以下内容进行基本写访问:
- ☑ 修改
- ☑ 读取并执行(自动选择)
- ☑ 列出文件夹内容(自动选择)
- ☑ 阅读(自动选择)
- ☑ 写入(自动选择)
但是,当我使用 Java 7 的 File API 使用类似选项时,它会选择:
- ☑ 特别
- ☑ 高级(不编辑,点击用户或组,查看)
- 显示高级权限
- 高级权限
- ☑(一堆复选框)
- ☑ 高级(不编辑,点击用户或组,查看)
这不仅更难管理(遍历对话框更容易遗漏某些内容),而且与单击这些框的行为不同。一些 UAC 提示的行为不同。更糟糕的是,由于对话遍历,切换权限(例如从 Windows 桌面)变得更加困难,从而增加了出错的机会。
如何使用 Java 设置这些复选框?
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)
.setPermissions(DELETE, DELETE_CHILD, LIST_DIRECTORY, READ_DATA, READ_ATTRIBUTES, ADD_FILE, WRITE_DATA, WRITE_ATTRIBUTES)
.build();
List<AclEntry> acl = view.getAcl();
acl.add(0, entry); // insert before any DENY entries
view.setAcl(acl);
【问题讨论】:
标签: java windows file permissions acl