高度な Cloud Identity グループ(CIG)サービスを使用すると、Apps Script で CIG API を使用できます。
リファレンス
このサービスの詳細については、CIG API のリファレンス ドキュメントをご覧ください。Apps Script のすべての高度なサービスと同様に、高度な CIG サービスでは、公開 API と同じオブジェクト、メソッド、パラメータを使用します。詳細については、メソッド シグネチャの決定方法をご覧ください。
サンプルコード
次のヘルパー関数は、API のバージョン v1 を使用します。
グループを作成
Google グループを作成するには、新しいグループ リソースのインスタンスを指定して groups.create
を呼び出します。グループ インスタンスには、cloudidentity.googleapis.com/groups.discussion_forum
に設定された groupKey
、parent
、label
を含める必要があります。グループの最初のオーナーを定義する 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);
}
}