非所有者如何通过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捕获删除操作的异常,便于排查问题。
前置配置
运行脚本前需完成两步操作:
- 在Google Apps Script编辑器中,点击「服务」→「添加服务」→选择「Drive API」并添加。
- 首次运行时完成授权,授予脚本访问Drive文件和权限的权限。
内容的提问来源于stack exchange,提问作者Vladimirzb
相关产品推荐
相关产品推荐

