【问题标题】:Google Storage - dynamically change ACL on single object (PHP)Google Storage - 在单个对象上动态更改 ACL (PHP)
【发布时间】:2022-01-14 09:20:53
【问题描述】:

我需要通过添加或删除 allUsers 实体来更新 ACL。

我有 PHP 库,我现在正在做的是:

$storage = new StorageClient([
    'projectId' => "xxxxx",
    'keyFilePath' => mykey, 
]);
$bucket = $storage->bucket('mybucket');
$acl = $bucket->acl('objectAccessControls', 'path/file/on/bucket');
if(add){
  $acl->add('allUsers', 'READER');
}else{
  $acl->delete('allUsers');
}

使用此代码实际上更改了所有存储桶配置,而不仅仅是文件。

如何正确指定特定文件的路径并仅更改 path/file/on/bucket 的权限?我使用了错误的功能?

这里是我正在使用的文档 https://googleapis.github.io/google-cloud-php/#/docs/google-cloud/v0.90.0/storage/acl

如果添加以下内容就是这种情况:

这是其他情况:

更新 1: 使用它来删除似乎工作 -> https://cloud.google.com/storage/docs/json_api/v1/objectAccessControls/delete

尝试将此处列出的参数包含在我所做的调用中,如下所示:

$options = ['object' => 'path/obj'];
$acl->delete('allUsers', $options)

还是不行

【问题讨论】:

    标签: php google-cloud-platform google-cloud-storage acl


    【解决方案1】:

    其实我已经通过使用 Google_Service 解决了

      $client = new Google_Client();
      $client->setApplicationName('GoogleBuck/0.1');
      $client->useApplicationDefaultCredentials(); // app engine env
      $client->addScope('https://www.googleapis.com/auth/devstorage.full_control'); 
      $storage = new Google_Service_Storage($client);
      $acl = new Google_Service_Storage_ObjectAccessControl($client);
      $acl->setEntity('allUsers');
      $acl->setRole('READER');
      $acl->setBucket($bucketName);
      $acl->setObject($objectName);
    

    添加

    $response = $storage->objectAccessControls->insert($bucketName, $objectName, $acl);
    

    删除

    $response = $storage->objectAccessControls->delete($bucketName, $objectName, 'allUsers');
     
    

    【讨论】:

      猜你喜欢
      • 2012-11-16
      • 2015-05-15
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      相关资源
      最近更新 更多