2016-04-24 9 views
0

現在、JSON API Javaライブラリを使用してGoogle Cloud Storageにオブジェクトをアップロードしており、アップロードされたオブジェクトの権限を変更しようとしました。私は最初のファイルをアップロードすると、ある3デフォルトのファイルアクセス権があります:googleクラウドオブジェクトの権限が消える

プロジェクトオーナー-PROJECTIDのOWNER

プロジェクトエディタ-PROJECTID OWNER

プロジェクト視聴者-PROJECTIDのOWNER

アップロードした後、自分のコードを使用して新しいファイルを追加しようとしましたが、すべてのユーザーがリーダーとしてアクセスできるようにしました。コード:

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リーダー

設定したい場合、元の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(); 
関連する問題