Cloud Identity 群组高级服务

借助高级 Cloud Identity Groups (CIG) 服务,您可以在 Apps 脚本中使用 CIG API

参考

如需详细了解此服务,请参阅 CIG API 的参考文档。与 Apps 脚本中的所有高级服务一样,高级 CIG 服务使用的对象、方法和参数均与公共 API 相同。如需了解详情,请参阅如何确定方法签名

示例代码

以下辅助函数使用 API 的 v1 版本

创建小组

如需创建 Google 群组,请使用新群组资源的实例调用 groups.create。群组实例必须包含设置为 cloudidentity.googleapis.com/groups.discussion_forumgroupKeyparentlabel。您还需要设置 initialGroupConfig 参数,该参数用于定义群组的初始所有者。您可以为此参数使用以下值:

WITH_INITIAL_OWNER:将发送请求的用户设为群组的所有者。在大多数情况下,您应使用此值。EMPTY:创建没有初始所有者的群组。只有 Google Workspace 超级用户或群组管理员才能使用此值。如需详细了解 Google Workspace 角色,请参阅预先创建的管理员角色。

以下示例展示了用于创建群组的辅助函数:

const groups = CloudIdentityGroups.Groups;

function createGroup(groupId, parentId, displayName) {
  const groupKey = { id: groupId };
  const group = {
    parent: "customerId/" + parentId,
    displayName: displayName,
    groupKey: groupKey,
    // Set the label to specify creation of a Google Group.
    labels: { "cloudidentity.googleapis.com/groups.discussion_forum": "" },
  };
  const optionalArgs = { initialGroupConfig: "WITH_INITIAL_OWNER" };

  try {
    const response = groups.create(group, optionalArgs);
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}

搜索群组

如需搜索 Google 群组,请使用查询字符串调用 groups.search。如需搜索所有群组,请提供 label cloudidentity.googleapis.com/groups.discussion_forum

const groups = CloudIdentityGroups.Groups;

function searchGroup(customer_id) {
  const search_query = `parent=='customerId/${customer_id}' && 'cloudidentity.googleapis.com/groups.discussion_forum' in labels`;
  const search_group_request = groups.search({ query: search_query });
  console.log(JSON.stringify(search_group_request));
}

向群组添加成员资格

群组存在后,可以为它创建成员资格。此方法需要 membership 资源和父级资源 name 字符串。您可以通过 lookup 方法查找群组来获取前者值。

以下辅助方法展示了向群组添加成员资格的示例。expiryDetail 是可选字段,可添加以设置成员资格的到期时间。preferredMemberKey 的值是成员的电子邮件地址。

const groups = CloudIdentityGroups.Groups;

function createMembership(namespace, groupId, memberKey) {
  try {
    // Given a group ID and namespace, retrieve the ID for parent group
    const groupLookupResponse = groups.lookup({
      'groupKey.id': groupId,
      'groupKey.namespace': namespace
    });
    const groupName = groupLookupResponse.name;

    // Create a membership object with a memberKey and a single role of type MEMBER
    const membership = {
      preferredMemberKey: { id: memberKey },
      roles: [
        {
          name: "MEMBER",
          expiryDetail: {
            expireTime: "2025-10-02T15:01:23Z",
          },
        },
      ],
    };

    // Create a membership using the ID for the parent group and a membership object
    const response = groups.Memberships.create(membership, groupName);
    console.log(JSON.stringify(response));
  } catch (e) {
    console.error(e);
  }
}

从成员处获取会员资格

使用 groups.memberships.searchDirectGroups 方法搜索成员的直接父级。

以下辅助方法展示了迭代给定成员的直接成员资格的示例。

const groups = CloudIdentityGroups.Groups;

 function searchMemberMemberships(memberId, pageSize) {
  try {
    let memberships = [];
    let nextPageToken = '';
    const withinParent = 'groups/-';  // This parameter sets the scope as "all groups"

    do {
      // Get page of memberships
      const queryParams = {
        query: `member_key_id == \'${memberId}\'`,
        page_size: pageSize,
        page_token: nextPageToken,
      };
      const response = groups.Memberships.searchDirectGroups(withinParent, queryParams);
      memberships = memberships.concat(response.memberships);

      // Set up next page
      nextPageToken = response.nextPageToken;
    } while (nextPageToken);

    return memberships;
  } catch(e) {
    console.error(e);
  }
}

获取群组的成员资格

使用 groups.memberships.list 方法列出群组的成员。

groupId:您要列出其成员的群组的数字 ID。如需查找单个组的 ID,请使用 groups.lookup 方法。如需查看客户或命名空间下的所有群组 ID,请使用 groups.list 方法。

const groups = CloudIdentityGroups.Groups;

function listGroupMemberships(groupId, pageSize) {
  try {
    let membershipList = [];
    let nextPageToken = '';

    // Get group name
    const groupName = groups.lookup({'groupKey.id': groupId}).name;

    do {
      // Get page of memberships
      const queryParams = {
        pageSize: pageSize,
        pageToken: nextPageToken
      }
      const response = groups.Memberships.list(groupName, queryParams);
      membershipList = membershipList.concat(response.memberships);

      // Set up next page
      nextPageToken = response.nextPageToken;
    } while(nextPageToken);

    return membershipList;
  } catch (error) {
    console.error(error);
  }
}