2016-04-24 2 views
0

В настоящее время я использую JSON API Java-библиотеку для загрузки объектов в Google Cloud Storage и пытаюсь изменить разрешение загружаемого объекта. Когда я первый загрузить файл, есть разрешение файла 3 по умолчанию, который является:google cloud object permission исчезает

владельцы-ProjectID проекта ВЛАДЕЛЕЦ

проекта редакторы ProjectID зрителей-ProjectID ПРЕДПРИНИМАТЕЛЬ

проекта ПРЕДПРИНИМАТЕЛЬ

После загрузки я попытался использовать свой код для добавления в новый файл разрешения, чтобы все пользователи имели доступ к нему как читателю, а мой код:

StorageObject objectMetadata = new StorageObject(); 

// set access control 
List<ObjectAccessControl> acl = Lists.newArrayList(); 
acl.add(new ObjectAccessControl().setEntity("allUsers").setRole("READER")); 
objectMetadata.setAcl(acl); 
Storage.Objects.Update req = client.objects().update(Bucket, file, objectMetadata); 
req.execute(); 

Однако после кода успешно, разрешение файла по 3 умолчанию исчезает, а вместо этого, это заменить:

ALLUSERS пользователя Читатель

Хотя это разрешение файла I хотел установить, исходное разрешение файла по умолчанию 3 исчезло. Есть ли способ сделать так, чтобы мои 3 разрешения по умолчанию сохранялись так же, как и разрешение этого нового файла? Любая помощь приветствуется.

ответ

0

Вызов "objects.update()" задает все метаданные вашего объекта. Ваш код создает пустые метаданные, добавляет разрешение «allUsers -> READER» и устанавливает метаданные объекта для этих новых метаданных, поэтому все ваши другие разрешения (и любые другие метаданные, установленные вами на объекте) исчезли.

Что вы хотели сделать, это добавить разрешение без изменения метаданных. Существует несколько хороших способов сделать это, но наиболее прямым является вызов «objectAccessControls(). Insert()» вместо:

ObjectAccessControl newControl = new ObjectAccessControl() 
    .setEntity("allUsers").setRole("READER"); 
Storage.ObjectAccessControls.Insert request = client.objectAccessControls().insert(
    Bucket, file, newControl); 
req.execute(); 
Смежные вопросы