【问题标题】:How to delete folder drive api如何删除文件夹驱动器api
【发布时间】:2016-11-02 09:52:22
【问题描述】:

即使我尝试更改权限,我也无法删除文件夹(由其他人创建),我有一个控制台应用程序,并且当前经过身份验证的用户可以执行以下操作:

  1. 创建文件夹/文件
  2. 移动文件

范围:

'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/drive.file',
'https://www.googleapis.com/auth/drive.appdata',
'https://spreadsheets.google.com/feeds',

尝试:

1.给当前用户设置权限

public function deleteFolder(\Google_Service_Drive_DriveFile $folder)
{
    $permission = new \Google_Service_Drive_Permission();
    $permission->setRole( 'owner' );
    $permission->setType( 'user' );
    $permission->setEmailAddress('someId@developer.gserviceaccount.com');
    $permission = $this->googleDriveClient->permissions->create( $folder->getId(),$permission,array('transferOwnership'=>true));
    $this->googleDriveClient->files->delete($folder->getId());
}

结果:

[Google_Service_Exception] {
“错误”:{
“错误”:[
{
“域”:“全球”,
“原因”:“内部错误”,
“消息”:“内部错误”
}
],
“代码”:500,
“消息”:“内部错误”} }

2.将type权限设置为anyone

public function deleteFolder(\Google_Service_Drive_DriveFile $folder)
{
    $permission = new \Google_Service_Drive_Permission();
    $permission->setRole( 'owner' );
    $permission->setType( 'anyone' );
    $permission = $this->googleDriveClient->permissions->create( $folder->getId(),$permission,array('transferOwnership'=>true));
    $this->googleDriveClient->files->delete($folder->getId());
}

结果:

[Google_Service_Exception]
{
“错误”:{

"errors": [                                                                
 {                                                                         
  "domain": "global",                                                      
  "reason": "insufficientFilePermissions",                                 
  "message": "The user does not have sufficient permissions for this file  ."                                                         

 }                                                                         
],                                                                         
"code": 403,                                                               
"message": "The user does not have sufficient permissions for this file."      }                                                         

}

尝试 3:冒充创作者

$this->googleClient->setAccessType('offline');
$this->googleClient->setSubject('x@domain.com');//if removed everything works 

[GuzzleHttp\Exception\ClientException]
客户端错误:POST https://www.googleapis.com/oauth2/v4/token 导致401 Unauthorized 回复:
{
“错误”:“未授权客户端”,
"error_description": "请求中未经授权的客户端或范围。",
“error_uri”:“”
}

我错过了什么吗?

【问题讨论】:

  • 文件夹里有东西吗?您是否删除了其他人的权限?我会坚持你的第一个版本,它看起来很接近。注意驱动器权限很痛苦。
  • 文件夹是空的,我只是想添加一个权限来摆脱它。痛点很明显
  • 想法:创建后做一个权限列表,看看它创建了什么。如果您拥有所有者权限后还有其他人,请删除它们。然后再次列出以确保它确实做到了。然后删除文件夹。 (像拔牙一样痛)
  • 嘿,你解决了 2 吗?我在我的应用程序中遇到了这个问题(
  • @aleXela 对不起,我不能,您可以将它们移动到临时目录并不时删除项目。我从事的项目被推迟了,所以我没有进一步调查......

标签: php permissions google-drive-api google-api-php-client


【解决方案1】:

只有文件夹的所有者才能删除文件夹。 使用服务帐号Using OAuth 2.0 for Server to Server Applications,取文件夹所有者Perform Google Apps Domain-Wide Delegation of Authority的身份。

一旦被授权为文件夹的所有者,就应该可以删除该文件夹。

【讨论】:

  • 我正在使用服务帐户并启用 DWD,该文件夹与服务帐户的电子邮件共享(“可以编辑”)...我迷路了
  • 您是否被授权为该文件夹的所有者? => 电子邮件地址应该是文件夹的所有者,而不是服务帐户的电子邮件地址。
  • 客户端ID是否在g套件的安全面板中,并且具有正确的范围?项目中是否启用了 Drive api?是否为服务帐号启用了域范围的授权?
  • Yes to all... P.S:我有一个 python 脚本,它执行我想做的完全相同的事情,但现在我想将它“翻译”为 PHP 以实现可维护性(所有凭据和设置都是复制)。很烦人我不能删除一个空文件夹,但可以创建文件和文件夹等......
  • 唯一的区别是要删除一个文件夹,您需要成为该文件夹的所有者。这就是我建议使用服务帐户的原因。我仍然怀疑域范围的委派,它是云控制台项目中服务帐户上的一个单独的复选框。 100% 确定已检查?
猜你喜欢
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多