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

非所有者如何通过Google Drive API批量移除自身共享文件权限?

回答

问题结论

是的,非所有者可以通过Google Drive API编程实现移除自身的文件访问权限,核心是正确调用权限删除接口并规避权限获取的限制。

原脚本错误原因

你遇到的403错误主要源于两点:

  • 直接通过Drive.Files.list获取文件的permissions字段时,非所有者通常没有权限查看文件的全部共享权限,导致拿到的权限信息无效或不全。
  • 未针对共享驱动器(Shared Drive)的场景配置正确的API参数,导致接口调用失败。

优化后的实现脚本

以下是修正后的Google Apps Script,解决了权限获取和调用的问题:

function removeMyselfFromSharedFiles() {
  const activeUserEmail = Session.getActiveUser().getEmail();
  let pageToken = null;

  do {
    // 筛选当前用户为协作者且非所有者的文件
    const fileList = Drive.Files.list({
      q: `'${activeUserEmail}' in writers or '${activeUserEmail}' in readers or '${activeUserEmail}' in commenters and trashed = false and not '${activeUserEmail}' in owners`,
      pageSize: 100,
      pageToken: pageToken,
      corpora: "allDrives",
      includeItemsFromAllDrives: true,
      supportsAllDrives: true,
      fields: "nextPageToken, files(id, name)"
    });

    if (!fileList.files || fileList.files.length === 0) break;

    // 遍历文件,获取并删除自身权限
    for (const file of fileList.files) {
      let permPageToken = null;
      let foundOwnPermission = false;

      do {
        // 仅获取当前用户的权限条目(避免无权限查看全部权限)
        const permList = Drive.Permissions.list(file.id, {
          pageToken: permPageToken,
          supportsAllDrives: true,
          fields: "nextPageToken, permissions(id, emailAddress)"
        });

        if (permList.permissions) {
          for (const perm of permList.permissions) {
            if (perm.emailAddress === activeUserEmail) {
              try {
                Drive.Permissions.remove(file.id, perm.id, {
                  supportsAllDrives: true
                });
                Logger.log(`成功移除对文件的访问权限:${file.name}`);
                foundOwnPermission = true;
                break;
              } catch (e) {
                Logger.log(`移除权限失败:${file.name},错误:${e.message}`);
              }
            }
          }
        }
        permPageToken = permList.nextPageToken;
      } while (permPageToken && !foundOwnPermission);
    }

    pageToken = fileList.nextPageToken;
  } while (pageToken);
}

关键优化点

  • 精准文件筛选:通过q参数定位当前用户为协作者且非所有者的文件,减少无效处理。
  • 权限获取优化:单独调用Drive.Permissions.list获取权限,确保能拿到自身的有效权限条目(非所有者无权查看所有权限,但能查看自己的)。
  • 共享驱动器兼容:所有API调用添加supportsAllDrives: true参数,适配共享驱动器场景。
  • 异常处理:用try-catch捕获删除操作的异常,便于排查问题。

前置配置

运行脚本前需完成两步操作:

  1. 在Google Apps Script编辑器中,点击「服务」→「添加服务」→选择「Drive API」并添加。
  2. 首次运行时完成授权,授予脚本访问Drive文件和权限的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:15:56