You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Apps Script插件中用File Picker缩小Drive权限范围?

Google Docs插件权限与文件导出路径问题

背景需求

开发一款Google Docs插件,需将导出文件保存至当前文档所在的同一文件夹,同时需使用最窄权限范围以通过应用市场审核。

原实现与权限冲突

原版本通过以下代码获取当前文档的父文件夹ID,但该实现需要受限权限范围 https://www.googleapis.com/auth/drive.readonly:

const currentDoc = DocumentApp.getActiveDocument();
const currentDocId = currentDoc.getId();
const currentFolderId = DriveApp.getFileById(currentDocId).getParents().next();

官方推荐使用仅需 https://www.googleapis.com/auth/drive.file 权限的Google Picker API,因此尝试切换至该方案。

Google Picker API尝试的问题

使用File Picker时,希望用户能快速定位到当前文档所在文件夹,但默认弹出的Picker显示最近文件夹,目标文件夹可能不在列表内。审核人员建议通过View的方法优化:

方案1:使用setFileIds预选文档

var docsView = new google.picker.DocsView()
  .setFileIds(<?= currentDocId ?>);

方案2:使用setParent设置初始文件夹

var docsView = new google.picker.DocsView()
  .setParent(<?= currentFolderId ?>);

但实际操作中遇到以下问题:

  • 仅能获取当前文档ID,获取父文件夹ID需要受限权限
  • 用当前文档ID设置fileIds后,Picker会跳转至“授权”页面显示当前文档;用户选择该文档后,无受限权限时无法通过Drive.Files.get加载文件;即使添加完整Drive权限,也无法获取文件的父文件夹(parents属性为undefined)

Picker回调代码及报错情况:

function pickerCallback(fileId) {
  // 无受限权限时报错:Error: API call to drive.files.get failed with error: File not found: xxxxx_xxxxx
  const file = Drive.Files.get(fileId, { supportsAllDrives: true });
  DocumentApp.getUi().alert(`Got file "${file.name}"!!`);

  // 添加完整权限后报错:Error: Cannot read properties of undefined (reading '0')
  const parent = file.parents[0];
  DocumentApp.getUi().alert(`Got parent "${parent.name}"!!`);

  return true;
}

当前可选方案

若要避开受限权限,只能选择以下影响用户体验的方案:

  • 将文件保存至用户Drive根文件夹,加剧Drive存储混乱
  • 显示默认File Picker,让用户自行查找文件夹,依赖目标文件夹出现在列表顶部
  • 其他可行方案?

权限审核相关疑问

  • 是否可以申请让插件通过受限权限审核?
  • 有没有开发者成功申请过?
  • 使用受限权限是否值得?

内容的提问来源于stack exchange,提问作者Dagmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:43:21