Sheet AddOn在drive.file scope下如何跨用户访问其创建的文件?
解决方案:drive.file权限下跨用户访问插件创建的文件
核心原因
drive.file权限的核心限制是:插件仅能访问当前用户主动通过File Picker授权的文件,以及当前用户通过插件创建的文件。不同用户的插件实例权限相互独立,因此用户B无法直接访问用户A通过插件创建的文件——即便这些文件和共享Sheet关联。
可行解决方案
1. 共享文件夹统一授权(严格符合drive.file要求)
- 提前创建一个共享文件夹,将所有使用插件的用户添加为成员(至少赋予编辑权限)。
- 要求所有用户首次使用插件时,通过File Picker选择并授权访问该共享文件夹。
- 插件将所有生成的文档统一存储到这个文件夹内。
- 优化体验:利用
PropertiesService存储用户的授权状态,避免重复触发授权弹窗。
2. 调整权限范围(需通过Google审核)
如果业务场景允许,可申请更宽泛的Drive权限:
https://www.googleapis.com/auth/drive.readonly:允许插件读取用户Drive内所有文件,需在OAuth consent screen中清晰说明用途以通过审核。https://www.googleapis.com/auth/drive:完全访问权限,仅适合必要场景,审核标准严格。
3. 服务账号托管文件(适合团队内部受控环境)
- 创建Google Cloud服务账号,为其分配Drive相关权限(如
drive.file或drive)。 - 插件通过服务账号身份创建和管理文件,所有文件的所有者为服务账号,而非单个用户。
- 将服务账号名下的文件/文件夹共享给所有插件用户,确保他们具备访问权限。
- 实现要点:在插件中集成OAuth2库完成服务账号身份验证,注意严格保护服务账号密钥不泄露。
4. Sheet属性存储文件ID+用户授权
- 插件生成文件后,将文件ID存储到当前Sheet的
DocumentProperties(文档属性)中,所有打开该Sheet的用户均可读取这些ID。 - 用户使用插件时,需通过File Picker授权访问目标文件或其所在文件夹,插件即可根据存储的ID获取文件内容。
- 缺点:用户需手动完成授权操作,体验略逊,但完全符合
drive.file权限规则。
内容的提问来源于stack exchange,提问作者Christian Hauf
相关产品推荐
相关产品推荐

