NodeJS 如何将Google云端硬盘文档访问权限更改为受限

sbtkgmzw  于 2023-05-17  发布在  Node.js
关注(0)|答案(2)|浏览(127)

我的应用程序会在google drive中创建一个电子表格,并将链接发送到用户的电子邮件中。当用户打开电子邮件并点击链接时,他/她将被重定向到

docs.google.com/spreadsheets/d/"spreadSheetId"

并访问所生成的文件。但这个文件默认情况下是公开的(对任何人在互联网上的链接-一般访问),如图所示。如何使用node.js将General Access类型更改为RESTRICTED,并仅给予访问权限授予指定的用户?
我使用“googleapis”npm包(版本49)和范围:

  1. https://www.googleapis.com/auth/drive
  2. https://www.googleapis.com/auth/spreadsheets

fjaof16o

fjaof16o1#

您可以使用permissions create方法授予用户对文件的访问权限,而不是将文件公开。
应该是这样的。如果它不起作用,请告诉我,我没有时间测试它。

const emails = ['SomeEmail@gmail.com', ];
for (let i = 0; i < emails.length; i++) {
  const res = await drive.permissions
    .create({
      resource: {
        role: "writer",
        type: "user",
        emailAddress: emails[i],
      },
      fileId: fileId,
      sendNotificationEmail: true,
      fields: "id",
    })
    .catch((err) => console.log(err.errors));
  if (res) console.log(res.data);
}
e5nqia27

e5nqia272#

要将文件常规访问权限从Anyone with the link更改为Restricted,可以使用permissions.delete方法。
我目前无法使用node.js进行测试,但根据示例,请求看起来像这样:

drive.permissions
  .delete({
    fileId: fileId, 
    permissionId: "anyoneWithLink"
  }

另外,在您的评论中,我看到您由于错误"Sorry, cannot transfer ownership to user@email.com. Ownership can only be transferred to another user in the same organization as the current owner."而在转移文件所有权时遇到问题
此行为是由于Google云端硬盘的工作方式,因为您无法将文件所有权转移到其他域。
已知限制和替代方案
您无法将所有权转让给外部用户,例如个人Google帐户或其他组织中的用户。此限制旨在保护用户和公司数据免受未经授权的传输和访问。根据您组织的共享策略,您可以使用以下替代方案。

参考资料

相关问题