如何在Google Apps Script中获取非管理员用户的组织单元路径
在Google Apps Script中无需管理员权限获取用户组织单元路径
核心结论
无法直接通过常规方式在普通用户权限下获取orgUnitPath(组织单元路径)。该字段属于Google Workspace的管理员级用户数据:
- 你最初尝试的代码:
仅管理员能成功提取const userEmail = Session.getActiveUser().getEmail(); const user = AdminDirectory.Users.get(userEmail);orgUnitPath,普通用户会触发GoogleJsonResponseException: Not Authorized to access this resource/api错误。 - 使用
viewType:'domain_public'视图的调用:
也无法返回组织单元信息,因为该字段不在Google开放的公开用户数据范围内。AdminDirectory.Users.get(userEmail, {viewType:'domain_public'});
已尝试方案的局限
- 服务账号+全域委派:可行但复杂度高,必须依赖Workspace管理员完成服务账号的全域委派配置,还需在插件中指定管理员邮箱,轻量化场景不适用。
- 自定义同步字段:需要管理员定期运行脚本同步组织单元到可公开读取的自定义用户字段,维护成本高,且存在数据不同步风险。
替代可行方案
1. 插件权限申请+管理员预批准
如果你的工具是Google Workspace Marketplace插件,可以申请https://www.googleapis.com/auth/admin.directory.user.readonly授权范围:
- 要求Workspace管理员在域内预先批准该权限(或配置为允许用户自行申请)。
- 普通用户安装插件并授权后,调用原代码即可获取自身的
orgUnitPath。 - 此方案仍需管理员参与配置,但相比服务账号方式,用户侧操作更简洁。
2. 利用域内群组映射组织单元
如果Workspace内已按组织单元创建对应的Google群组:
- 通过以下代码获取用户所属群组:
const userEmail = Session.getActiveUser().getEmail(); const groups = AdminDirectory.Groups.list({userKey: userEmail}); - 预先将群组名称与组织单元路径做映射,以此推断用户所在组织。
- 此方案无需特殊权限(只要允许普通用户读取自身群组信息),但依赖域内群组与组织单元的对应关系维护。
内容的提问来源于stack exchange,提问作者unhammer
相关产品推荐
相关产品推荐

