通过Google Apps Script调用API 如何区分Google Drive用户显式与继承权限
Google Drive权限来源判断方案(Google Apps Script实现)
可以实现权限来源区分,核心依赖Google Drive API v3的permissionDetails字段,无需额外依赖第三方工具。
实现逻辑
每个权限条目对应的permissionDetails属性中包含两个核心标识字段:
inherited:布尔值,false代表当前权限是直接授予目标文件/文件夹的显式权限,true代表权限从上级资源继承而来inheritedFrom:字符串,仅当inherited为true时返回,标识权限继承的上级资源ID
前置准备
在Google Apps Script编辑器的「服务」菜单中添加Drive API v3服务,内置的DriveApp高级服务无法获取权限来源字段,不可使用。
示例代码
// 传入目标文件/文件夹ID即可查询所有权限的来源 function getPermissionSource(targetResourceId) { // 调用Drive API拉取权限列表,明确指定返回permissionDetails字段 const res = Drive.Permissions.list(targetResourceId, { supportsAllDrives: true, // 涉及共享盘时必须开启 fields: "permissions(emailAddress,role,permissionDetails)" }); const permissionList = res.permissions || []; permissionList.forEach(item => { const detail = item.permissionDetails[0]; const isExplicitPermission = !detail.inherited; // 可根据业务需求替换为写入表格/其他逻辑 console.log(`授权对象:${item.emailAddress || '公开/域内权限'},权限角色:${item.role}`); console.log(isExplicitPermission ? "权限类型:显式授予" : `权限类型:继承自资源 ${detail.inheritedFrom}`); }); }
注意事项
- 共享盘根目录下的用户权限默认均为显式授予,无上级继承来源
- 批量查询大量资源权限时需遵守Drive API的调用配额限制,避免触发限流报错
内容的提问来源于stack exchange,提问作者bugmagnet
相关产品推荐
相关产品推荐

