Интерфейс 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, или имеющих чётко определённое соответствие между моделью NFSv4 ACL и моделью 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, отличающуюся от модели NFSv4 ACL, то установка начального ACL при создании файла должна переводить ACL в модель, поддерживаемую файловой системой. Методы создания файла должны отклонять (путем выброса IOException) любые попытки создать файл, безопасность которого снизится в результате перевода.
- С:
- 1.7
- Внешние спецификации
Краткое описание методов
Методы, объявленные в интерфейсе java.nio.file.attribute.FileOwnerAttributeView
getOwner, setOwner
Подробное описание методов
name
String name()
"acl".- Указано в:
-
nameв интерфейсеAttributeView - Указано в:
-
nameв интерфейсеFileOwnerAttributeView - Возвращает:
- имя представления атрибутов
getAcl
List<AclEntry> getAcl() throws IOException
Если файловая система использует модель ACL, отличную от модели NFSv4, то этот метод возвращает ACL, представляющий собой перевод ACL в модель NFSv4 ACL.
Возвращаемый список изменяем, чтобы позволить изменения существующего ACL. Метод setAcl используется для обновления атрибута ACL файла.
- Возвращает:
- упорядоченный список
entries, представляющий ACL - Бросает:
-
IOException- если произошла ошибка ввода-вывода -
SecurityException- В случае с поставщиком по умолчанию, если установлен менеджер безопасности, и он отклоняетRuntimePermission("accessUserInformation")или его методcheckReadотклоняет чтение файла.
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 недействителен -
SecurityException- В случае с поставщиком по умолчанию, если установлен менеджер безопасности, и он отклоняетRuntimePermission("accessUserInformation")или его методcheckWriteотклоняет запись файла.
© 1993, 2023, 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/21/docs/api/java.base/java/nio/file/attribute/AclFileAttributeView.html