高度な Cloud Identity グループ サービス

高度な Cloud Identity グループ(CIG)サービスを使用すると、Apps Script で CIG API を使用できます。

リファレンス

このサービスの詳細については、CIG API のリファレンス ドキュメントをご覧ください。Apps Script のすべての高度なサービスと同様に、高度な CIG サービスでは、公開 API と同じオブジェクト、メソッド、パラメータを使用します。詳細については、メソッド シグネチャの決定方法をご覧ください。

サンプルコード

次のヘルパー関数は、API のバージョン v1 を使用します。

グループを作成

Google グループを作成するには、新しいグループ リソースのインスタンスを指定して groups.create を呼び出します。グループ インスタンスには、cloudidentity.googleapis.com/groups.discussion_forum に設定された groupKeyparentlabel を含める必要があります。グループの最初のオーナーを定義する 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);
  }
}