Интерфейс AclFileAttributeView
- Все суперинтерфейсы:
AttributeView, FileAttributeView, FileOwnerAttributeView
public interface AclFileAttributeView extends FileOwnerAttributeView
ACL используются для указания прав доступа к объектам файловой системы. ACL представляет собой упорядоченный список access-control-entries, каждый элемент которого указывает UserPrincipal и уровень доступа для этого субъекта. Это представление атрибутов файла определяет методы getAcl и setAcl для чтения и записи ACL на основе модели ACL, заданной в RFC 3530: протокол сетевой файловой системы (NFS) версии 4. Это представление атрибутов файла предназначено для реализаций файловых систем, поддерживающих модель ACL NFSv4 или имеющих четко определенное соответствие между моделью ACL NFSv4 и моделью ACL, используемой файловой системой. Детали такого соответствия зависят от реализации и поэтому не специфицированы.
Этот класс также расширяет FileOwnerAttributeView, определяя методы получения и задания владельца файла.
Если файловая система предоставляет доступ к набору file-systems, неоднородных по своим свойствам, только некоторые из этих файловых систем могут поддерживать ACL. Метод supportsFileAttributeView можно использовать для проверки поддержки ACL файловой системой.
Совместимость
RFC 3530 допускает использование специальных идентификаторов пользователей на платформах, поддерживающих определенные POSIX права доступа. Специальные идентификаторы пользователей: "OWNER@", "GROUP@" и "EVERYONE@". Если поддерживаются и AclFileAttributeView, и PosixFileAttributeView, эти специальные идентификаторы пользователей могут включаться в читаемые или записываемые элементы ACL entries. Службу UserPrincipalLookupService файловой системы можно использовать для получения UserPrincipal, представляющего эти специальные идентификаторы. Для этого вызывается метод lookupPrincipalByName. Пример использования: Предположим, что мы хотим добавить запись в существующий 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);
Динамический доступ
При необходимости динамического доступа к атрибутам файла атрибуты, поддерживаемые этим представлением атрибутов, перечислены ниже:
Имя Тип "acl" List<AclEntry>"owner" UserPrincipal
Метод getAttribute можно использовать для чтения атрибутов ACL или владельца, как если бы были вызваны методы getAcl или getOwner.
Метод setAttribute можно использовать для обновления атрибутов ACL или владельца, как если бы были вызваны методы setAcl или setOwner.
Задание ACL при создании файла
Реализации, поддерживающие это представление атрибутов, также могут поддерживать задание начального ACL при создании файла или каталога. Начальный ACL можно передать таким методам, как createFile или createDirectory, в виде FileAttribute с name "acl:acl" и value, представляющим собой список объектов AclEntry.
Если реализация поддерживает модель ACL, отличающуюся от модели ACL, определенной NFSv4, при задании начального ACL во время создания файла ACL должен быть преобразован в модель, поддерживаемую файловой системой. Методы, создающие файл, должны отклонять (выбрасывая IOException) любую попытку создать файл, который в результате преобразования окажется менее защищенным.
- С версии:
- 1.7
- Внешние спецификации
Краткое описание методов
Методы, объявленные в интерфейсе FileOwnerAttributeView
getOwner, setOwner
Подробное описание методов
name
String name()
"acl".- Определено в:
-
nameв интерфейсеAttributeView - Определено в:
-
nameв интерфейсеFileOwnerAttributeView - Возвращает:
- имя представления атрибутов
getAcl
List<AclEntry> getAcl() throws IOException
Если файловая система использует модель ACL, отличающуюся от модели ACL, определенной NFSv4, этот метод возвращает ACL, преобразованный в модель ACL NFSv4.
Возвращаемый список можно изменять, что упрощает внесение изменений в существующий ACL. Для обновления атрибута ACL файла используется метод setAcl.
- Возвращает:
- упорядоченный список
entries, представляющих ACL - Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода
setAcl
void setAcl(List<AclEntry> acl) throws IOException
Если файловая система поддерживает списки управления доступом, но использует модель ACL, отличающуюся от модели ACL, определенной NFSv4, этот метод должен преобразовать ACL в модель, поддерживаемую файловой системой. Метод должен отклонять (выбрасывая IOException) любую попытку записать ACL, который, по-видимому, сделает файл более защищенным, чем он был бы после обновления ACL. Если реализация не поддерживает сопоставление записей типа AclEntryType.AUDIT или AclEntryType.ALARM, при записи ACL этот метод игнорирует такие записи.
Если запись ACL содержит user-principal, не связанного с тем же провайдером, что и это представление атрибутов, выбрасывается ProviderMismatchException. Дополнительная проверка, если она предусмотрена, зависит от реализации.
Если файловая система поддерживает другие атрибуты файла, связанные с безопасностью (например, access-permissions файла), обновление списка управления доступом также может привести к обновлению этих атрибутов безопасности.
- Параметры:
-
acl— новый список управления доступом - Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода или ACL недопустим
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/file/attribute/AclFileAttributeView.html