我想知道非管理员帐户如何使用 Admin SDK

问题描述

对不起,如果我的英语很奇怪。

我想知道非管理员帐户如何使用 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 和方法 getActiveUsergetEmail 运行应用程序的用户: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