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

如何获取文件专属编辑器而非继承的文件夹所有者?

解决方案:筛选文件级专属编辑器并迁移权限

要准确获取仅直接分配给文件的编辑器(排除所有者、继承自原文件夹的编辑器),不能依赖编辑器列表的排序(顺序无固定规则),需通过Drive API获取权限的详细继承关系,结合你已有的原文件夹编辑器列表做精准过滤。以下是可行思路和代码实现:

核心逻辑

  1. 区分权限来源:利用Drive API获取文件的权限详情,判断每个权限是否是从父文件夹继承的(而非直接分配给文件)
  2. 多层过滤:依次排除文件所有者、继承权限用户、原文件夹编辑器列表中的用户,最终保留仅文件级分配的编辑器
  3. 迁移后重置权限:移动文件到新文件夹后,清除原有非所有者权限,再重新添加筛选后的编辑器,避免继承新文件夹的权限

代码实现

function migrateFileWithExclusiveEditors() {
  // 配置参数
  const targetFileId = "你的目标文件ID";
  const originalFolderEditors = ["课堂账号邮箱1", "课堂账号邮箱2"]; // 已有的原文件夹编辑器邮箱列表
  const newFolderId = "新文件夹ID";

  // 获取文件对象与所有者邮箱
  const file = DriveApp.getFileById(targetFileId);
  const ownerEmail = file.getOwner().getEmail();

  // 获取文件所有权限详情(需提前启用Drive API)
  const permissions = Drive.Permissions.list(targetFileId, {
    fields: "permissions(id,emailAddress,role,permissionDetails)"
  }).permissions;

  // 筛选仅文件级分配的编辑器
  const exclusiveEditors = permissions.filter(perm => {
    // 排除所有者
    if (perm.emailAddress === ownerEmail) return false;
    // 排除从文件夹继承的权限
    const isInherited = perm.permissionDetails.some(detail => detail.inherited);
    if (isInherited) return false;
    // 排除原文件夹编辑器列表中的用户
    if (originalFolderEditors.includes(perm.emailAddress)) return false;
    // 仅保留编辑权限用户
    return perm.role === "writer";
  }).map(perm => perm.emailAddress);

  // 移动文件到新文件夹
  const newFolder = DriveApp.getFolderById(newFolderId);
  file.moveTo(newFolder);

  // 清除文件原有非所有者权限
  permissions.forEach(perm => {
    if (perm.emailAddress !== ownerEmail) {
      file.removeEditor(perm.emailAddress);
    }
  });

  // 添加筛选后的专属编辑器
  exclusiveEditors.forEach(email => {
    file.addEditor(email);
  });

  Logger.log("已完成迁移,保留的文件级编辑器:", exclusiveEditors);
}

关键说明

  • 启用Drive API:在脚本编辑器左侧菜单「服务」中添加Drive API(版本选v3),否则无法调用Drive.Permissions.list
  • 权限准确性:permissionDetails.inherited字段是判断权限是否继承的核心,比单纯依赖getEditors()的结果更可靠
  • 配额注意:批量处理大量文件时,需注意Drive API的每日调用配额,可通过批量请求优化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:42:15