问题描述
对不起,如果我的英语很奇怪。
我想知道非管理员帐户如何使用 Admin SDK。 如果您有任何建议,请告诉我。
我正在使用 Google 应用脚本为一所小学开发插件。 我想按学生、老师、年级等限制API,所以我需要获取组织信息。
还有一些其他类似的问题,显然无法正常尝试。
使用 Admin SDK 时,Google 会向用户显示接受确认屏幕。 一旦用户同意,Google 就会为应用提供一个短期内有效的访问令牌。我想我可以通过使用该访问令牌来做到这一点。从安全的角度来看,这种方法是否危险?
很抱歉没有解释。
我目前正在为一所小学开发谷歌幻灯片插件。 它应该在侧边栏中显示使用 vuejs 制作的 SPA 并让您操作它。
例如,我们可以预先管理一个可以使用此应用程序的组织的白名单,不允许不匹配白名单的组织使用它。
如果单位由学校单位管理,可以按域进行访问控制,但在某些地区,组织是按市管理的,因此无法实现学校单位的访问控制...
此外,如果我们匹配白名单,我们希望执行以下操作。
使用组织结构来管理学校和学生。 (https://support.google.com/a/answer/4352075?ref_topic=4390186&hl=en)
我们认为可以通过使用 Admin SDK 获取组织信息来实现这一点
解决方法
答案
不能像 Google 在文档中所说的那样将 Admin SDK 与非管理员帐户一起使用:此 API 使 Google Workspace 域的管理员(包括经销商)能够管理设备、群组、用户及其域中的其他实体。
不过,您的问题有两种解决方法,但您需要使用管理员帐户来配置方案。
初始方法
- 获取使用类 Session 和方法 getActiveUser 和 getEmail 运行应用程序的用户:
var email = Session.getActiveUser().getEmail();
- 获取每个用户所属的 organizational unit。有了这些信息,您将能够过滤用户并在加载项中显示不同的选项。主要问题是需要使用AdminDirectory.Users.get(userEmail)来获取
organizational unit
,并且需要如下授权范围:https://www.googleapis.com/auth/admin.directory.user.readonly
。
解决方案 1
- 创建一个
Spreadsheet
,其中包含将要使用插件的所有用户及其organizational unit
- 使用 List all users 获取域中的所有用户并将每封电子邮件写入第一列。
- 使用
AdminDirectory.Users.get(email).orgUnitPath
获取organizational unit
并将其写入下一列 - 最后,当用户使用附加组件时,在
Session.getActiveUser().getEmail()
中搜索活跃用户(Spreadsheet
)的电子邮件,获取行号并获取organizational unit
的值这是在第二列。
解决方案 2
- 创建一个 custom admin role 并将其分配给要使用该插件的每个用户。 您必须以超级管理员身份登录才能执行此任务。您可以here并选择
Users -> Read
, - 为每个用户分配新角色 creating a role assignment
- 最后,用户将能够使用
var organization = AdminDirectory.Users.get(email).orgUnitPath