【问题标题】:How to update permissions in Google Drive API v3?如何在 Google Drive API v3 中更新权限?
【发布时间】:2020-10-23 05:36:08
【问题描述】:

我使用服务账号上传了wav文件,服务账号创建了文件,服务账号是所有者:

metadata = {'name': filename, 'parents': [FolderId]}
media = MediaFileUpload(filepath, mimetype='audio/wav')
r = drive.files().create(body=metadata, media_body=media, fields='id').execute()

{'permissions': [{'deleted': False,
              'displayName': 'My name',
              'emailAddress': 'myemail@gmail.com',
              'id': '00654354190098938408',
              'kind': 'drive#permission',
              'photoLink': 'https://lh6.googleusercontent.com/photo.jpg',
              'role': 'writer',
              'type': 'user'},
             {'deleted': False,
              'displayName': 'myservice@myservice.iam.gserviceaccount.com',
              'emailAddress': 'myservice@myservice.iam.gserviceaccount.com',
              'id': '16815597635264162472',
              'kind': 'drive#permission',
              'role': 'owner',
              'type': 'user'}]}

然后我尝试将myemailrole 帐户从writer 更改为owner 并得到一个错误:

drive.permissions().update(fileId=fileId, permissionId='00654354190098938408', transferOwnership=True,
    body={'role': 'owner'}).execute()

用户对此文件没有足够的权限。

怎么了?

我的服务帐户是所有者,我可以通过服务帐户删除文件,但它没有权限转移所有权,为什么? 当我使用service 帐户创建电子表格并将所有权转移到myemail 帐户时,它可以完美运行。

我尝试创建新权限并得到了这个:

permission = {
    "emailAddress": 'myemail@gmail.com',
    "role": 'owner',
    "type": 'user',
}
drive.permissions().create(fileId=fileId, body=permission, transferOwnership=True).execute()

“错误请求。用户消息:“您还不能更改此项目的所有者。 (我们正在努力。)""

【问题讨论】:

  • 我认为这种情况可能与this thread相同。在这个线程中,Permissions:create 方法当时无法与批处理请求一起使用。在这种情况下,出现了currently under development 之类的错误。但是最近,这必须能够使用。所以我相信你现在遇到的We're working on it.这样的问题会在以后的更新中得到解决。
  • 您能分享一下您是如何上传文件的吗?您还尝试过将Permissions: updatetransferOwnership 一起使用吗?
  • @Tanaike 他们一直在工作on it for the last 8 years。相反,有没有办法在drive.files().create(...) 方法中将不同的用户设置为所有者?
  • @Kessy 我添加了上传到帖子。我已经使用update,请阅读我的帖子。
  • 您有没有机会尝试上传一个 doc 文件并进行传输?我不认为你可以传输 wav 文件。

标签: google-api google-drive-api google-apps


【解决方案1】:

根据此处找到的文档Make someone else the owner of your file

从您的个人帐户,您可以传输以下文件类型:

  • 谷歌文档
  • Google 表格
  • 谷歌幻灯片
  • Google 表单
  • Google 绘图
  • Google 我的地图
  • 文件夹 提示:当您转移文件夹的所有权时,它只会转移选定的文件夹,而不包括其中的文件。

如果 google drive 不支持传输该文件类型,则服务帐户也无法传输它。

解决方法。让用户将文件上传到他们的帐户,而不是服务帐户。

【讨论】:

  • 我已经使用 x@gmail.com 用户上传了 txt 文件并尝试将所有者转移到 y@gmail 并且我收到错误“您还不能更改此项目的所有者”。仅适用于 doc 文件。 Google 关于文档的 try api 部分对非 .doc/.docx 文件具有相同的行为。通过 google drive 原生 UI 工作
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 2016-02-19
  • 2012-09-05
  • 2023-03-06
  • 2019-11-08
相关资源
最近更新 更多