public interface AclFileAttributeView extends FileOwnerAttributeView
ACL用于指定文件系统对象的访问权限。 ACL是access-control-entries
的有序列表,每个都指定一个UserPrincipal
以及该用户主体的访问级别。 此文件属性视图根据RFC 3530: Network File System (NFS) version 4 Protocol中指定的ACL模型定义getAcl
和setAcl
读取和写入ACL的方法。 此文件属性视图适用于支持NFSv4 ACL模型或在NFSv4 ACL模型与文件系统使用的ACL模型之间的定义良好的映射的文件系统实现。 这种映射的细节依赖于实现,因此是未指定的。
此类还扩展了FileOwnerAttributeView
,以定义获取和设置文件所有者的方法。
当一个文件系统提供访问不一致的一组file-systems
时 ,只有一些文件系统可能支持ACL。 supportsFileAttributeView
方法可以用来测试文件系统是否支持ACL。
OWNER@
”,“ GROUP@
”和“ EVERYONE@
”。
当支持AclFileAttributeView
和PosixFileAttributeView
时,这些特殊用户身份可能包含在被读取或写入的ACL entries
中。
文件系统的UserPrincipalLookupService
可以通过调用lookupPrincipalByName
方法来获得UserPrincipal
来表示这些特殊身份。
使用示例:假设我们希望将一个条目添加到现有的ACL以授予“joe”访问权限:
// lookup "joe"
UserPrincipal joe = file.getFileSystem().getUserPrincipalLookupService()
.lookupPrincipalByName("joe");
// get view
AclFileAttributeView view = Files.getFileAttributeView(file, AclFileAttributeView.class);
// create ACE to give "joe" read access
AclEntry entry = AclEntry.newBuilder()
.setType(AclEntryType.ALLOW)
.setPrincipal(joe)
.setPermissions(AclEntryPermission.READ_DATA, AclEntryPermission.READ_ATTRIBUTES)
.build();
// read ACL, insert ACE, re-write ACL
List<AclEntry> acl = view.getAcl();
acl.add(0, entry); // insert before any DENY entries
view.setAcl(acl);
需要动态访问文件属性的属性视图支持的属性如下:
Name Type "acl" List
<AclEntry
>"owner" UserPrincipal
getAttribute
方法可以用于读取ACL或所有者属性,就像通过调用getAcl
或getOwner
方法一样。
setAttribute
方法可用于更新ACL或所有者属性,就好像通过调用setAcl
或setOwner
方法一样。
支持此属性视图的实现还可以支持在创建文件或目录时设置初始ACL。 初始ACL可被提供给的方法,如createFile
或createDirectory
作为FileAttribute
与name
"acl:acl"
和value
即列表AclEntry
对象。
在实现支持与NFSv4定义的ACL模型不同的ACL模型的情况下,创建文件时设置初始ACL必须将ACL转换为文件系统支持的模型。 创建文件的方法应该拒绝(通过投掷IOException
)任何尝试创建由于翻译而不太安全的文件。
String name()
"acl"
。
name
在界面
AttributeView
name
在界面
FileOwnerAttributeView
List<AclEntry> getAcl() throws IOException
当文件系统使用与NFSv4定义的ACL模型不同的ACL模型时,该方法返回一个ACL,该ACL是将NFS转换为NFSv4 ACL模型。
返回的列表是可修改的,以便于更改现有的ACL。 setAcl
方法用于更新文件的ACL属性。
entries
的有序列表
IOException
- 如果发生I / O错误
SecurityException
- 在默认提供程序的情况下,安装了一个安全管理器,它拒绝RuntimePermission
("accessUserInformation")或其checkRead
方法拒绝对该文件的读取访问。
void setAcl(List<AclEntry> acl) throws IOException
文件系统支持访问控制列表的位置,并且使用与NFSv4定义的ACL模型不同的ACL模型,则该方法必须将ACL转换为文件系统支持的模型。 这种方法应该拒绝(通过抛出IOException
)任何尝试编写一个ACL,这样做会使文件比ACL更新时更安全。 在实现不支持AclEntryType.AUDIT
或AclEntryType.ALARM
条目的映射的情况下,此方法在写入ACL时忽略这些条目。
如果ACL条目包含一个user-principal
不与相同的提供这个属性视图,则相关ProviderMismatchException
被抛出。 额外的验证(如果有的话)依赖于实现。
如果文件系统支持其他与安全相关的文件属性(例如,例如文件access-permissions
),更新访问控制列表也可能导致这些与安全性有关的属性被更新。
acl
- 新的访问控制列表
IOException
- 如果发生I / O错误或ACL无效
SecurityException
- 在默认提供程序的情况下,安装了一个安全管理器,它拒绝RuntimePermission
("accessUserInformation")或其checkWrite
方法拒绝对该文件的写入访问。