บริการขั้นสูงของกลุ่ม Cloud Identity (CIG) มีฟีเจอร์ที่เทียบเท่ากับ Groups Service API และสามารถใช้แทนได้
ดูวิธีการช่วยที่ระบุไว้เพื่อดูวิธีใช้ความสามารถที่เทียบเท่า ผ่าน CIG Advanced Service
ตั้งค่า
หากต้องการใช้ CIG Advanced Service ให้เปิดใช้ ภายในโปรเจ็กต์สคริปต์ก่อน
เราได้กำหนดตัวแปรต่อไปนี้เพื่อย่อลายเซ็นของเมธอดบางรายการในคู่มือนี้
const groups = CloudIdentityGroups.Groups;
เมธอด GroupsApp
เมธอดตัวช่วยต่อไปนี้สอดคล้องกับเมธอดของบริการกลุ่ม GroupsApp
ในคู่มือนี้ คำว่ากลุ่มหมายถึงทรัพยากรกลุ่ม ซึ่งแตกต่างจากออบเจ็กต์คลาสกลุ่ม ทรัพยากรกลุ่ม คือออบเจ็กต์ JavaScript ที่ไม่มีเมธอด แต่สามารถใช้ใน CIG Advanced Service เพื่อดึงข้อมูลที่คล้ายกับข้อมูลในออบเจ็กต์คลาสกลุ่ม ได้
getGroupByEmail
/**
* Given a group's email, returns that group's resource
*
* @param {String} email: The email address to lookup a group by
* @return {Group} group: The group resource associated with the email
*/
function groupsAppGetGroupByEmail(email) {
// Retrieve the name ID of the group
const groupName = groups.lookup({
'groupKey.id': email,
'groupKey.namespace': '' // Optional for google groups, dynamic groups, and security groups
// Necessary for identity-mapped groups (see https://developers.google.com/cloud-search/docs/guides/identity-mapping)
}).name;
// Retrieve the group resource
return groups.get(groupName);
}
getGroups
เมธอด Helper ต่อไปนี้จะแสดงรายการทรัพยากรการเป็นสมาชิก
เข้าถึงgroup
ฟิลด์ขององค์ประกอบเพื่อค้นหารหัสชื่อ ซึ่งมีประโยชน์สำหรับ
วิธีการหลายอย่างของบริการขั้นสูงของ CIG ในทำนองเดียวกัน ให้เข้าถึง groupKey.id
ของ
องค์ประกอบเพื่อค้นหาอีเมล
/**
* Retrieves all the membership relation resources to groups which you are a
* direct member (or a pending member).
*
* @return {Array<MembershipRelation>} groups : List of direct memberships where
* you are the member.
*/
function groupsAppGetGroups() {
const myEmail = Session.getActiveUser().getEmail();
let pageToken = '';
let membershipList = [];
do {
const queryParams = {
query:`member_key_id=='${myEmail}'`,
pageToken:pageToken
};
const searchResult = groups.Memberships.searchDirectGroups('groups/-', queryParams);
membershipList = membershipList.concat(searchResult.memberships);
pageToken = searchResult.nextPageToken;
} while (pageToken);
return membershipList;
}
วิธีการของกลุ่ม
เมธอดตัวช่วยต่อไปนี้สอดคล้องกับเมธอดของบริการกลุ่ม Groups Class
getEmail
/**
* Gets a group's email address
*
* @param {Object} group: A group resource
* @return {String} email: The email associated with the group resource.
*/
function getEmail(group) {
return group.groupKey.id;
}
getGroups
วิธีต่อไปนี้ใช้ Memberships.list
ซึ่งจะดึงข้อมูลการเป็นสมาชิกทั้งหมดในกลุ่มที่ระบุ ซึ่งอาจรวมถึง
การเป็นสมาชิกของผู้ใช้และกลุ่ม
หากต้องการประมาณค่าเมธอด getGroups
ของบริการกลุ่มให้ดียิ่งขึ้น เราสามารถกรองการเป็นสมาชิกตามType
ได้
เราจะได้รับสิทธิ์เข้าถึงฟิลด์นี้โดยการระบุ FULL
View
เป็นพารามิเตอร์การค้นหาไปยัง Memberships.list
หรือโดยการดำเนินการ Memberships.lookup
แต่ละรายการสำหรับการเป็นสมาชิกที่ระบุ
/**
* Fetch a list of memberships with provided group as its parent
*
* @param {Group} group: A group resource
* @return {Array<Membership>} membershipList: The memberships where the parent
* is the provided group and member is a also a group.
*/
function getGroups(group) {
let membershipList = [];
let pageToken = '';
do {
// Fetch a page of memberships
const queryParams = {
view: 'FULL',
pageToken: pageToken
}
const response = groups.Memberships.list(group.name, queryParams);
// Filter non-group memberships
const onlyGroupMemberships = response.memberships.filter(
membership => membership.type == 'GROUP'
);
membershipList = membershipList.concat(onlyGroupMemberships);
// Set up next page
pageToken = response.nextPageToken;
} while(pageToken);
return membershipList;
}
getRole และ getRoles
แม้ว่าบริการกลุ่มอาจแสดงเฉพาะบทบาทที่มีลำดับความสำคัญสูงสุดในgetRole()
แต่ฟิลด์ roles
ในทรัพยากรสมาชิกจะมีองค์ประกอบแยกต่างหากสำหรับแต่ละบทบาทที่สมาชิกมีสิทธิ์ (เช่น MEMBER, OWNER, ADMIN)
/**
* Retrieve the membership roles of a member to a group.
*
* @param {Group} containingGroup: The group whom the member belongs to
* @param {String} email: The email address associated with a member that
* belongs to the containingGroup
* @return {Array<Role>} roles: List of roles the member holds with respect to
* the containingGroup.
*/
function getRoleWithEmail(containingGroup, email) {
// First fetch the membership
const membershipName = groups.Memberships.lookup(containingGroup.name, { 'memberKey.id': email }).name;
const membership = groups.Memberships.get(membershipName);
// Then retrieve the role
return membership.roles;
}
/**
* Retrieve the membership roles of a member to a group.
*
* @param {Group} containingGroup: The group resource whom the member belongs to
* @param {User} user: The user associated with a member that belongs to the
* containingGroup
* @return {Array<Role>} roles: List of roles the member holds with respect to
* the containingGroup
*/
function getRoleWithUser(containingGroup, user) {
return getRoleWithEmail(containingGroup, user.getEmail());
}
/**
* Retrieve the membership roles of a group of members to a group
*
* @param {Group} containingGroup: The group resource to which roles are
* relevant
* @param {Array<User>} users: List of users to fetch roles from
* @return {Array<Array<Role>>} roles: A list where every element is a list of
* roles of member to the containingGroup
*/
function getRoles(containingGroup, users) {
let roles = [];
for (const user of users) {
roles.push(getRoleWithUser(containingGroup, user));
}
return roles;
}
getUsers
เช่นเดียวกับแนวทางใน getGroups เราสามารถดึงข้อมูลการเป็นสมาชิกของกลุ่มได้ด้วย Memberships.list
และกรองผลลัพธ์เพื่อเก็บเฉพาะ Type
เป้าหมายไว้
/**
* Given a group, retrieve its direct members and banned members of the group
* that have a known corresponding Google Account.
*
* @param {Group} group: The group Resource whom the users being queried belong
* to
* @return {Array<String>} users: A list of emails associated with members of
* the given group
*/
function getUsers(group) {
let userList = [];
let pageToken = '';
do {
// Fetch a page of memberships from the group
const queryParams = {
view: 'FULL',
pageToken: pageToken
}
const listResponse = groups.Memberships.list(group.name, queryParams);
// Filter non-users and keep member emails
const users = listResponse.memberships
.filter(membership => membership.type == 'USER')
.map(membership => membership.preferredMemberKey.id);
userList = userList.concat(users);
// Prepare next page
pageToken = listResponse.nextPageToken;
} while (pageToken);
return userList;
}
hasGroup และ hasUser
ทั้งบริการกลุ่ม hasGroup
และ hasUser
จะยืนยันว่าเอนทิตีเป็นสมาชิกของกลุ่มที่กำหนดหรือไม่ เนื่องจากทั้งกลุ่ม
และผู้ใช้สามารถแสดงด้วยอีเมลได้ จึงใช้วิธีต่อไปนี้เพื่อยืนยันว่าทั้ง 2 อย่างเป็นของกลุ่มที่กำหนดหรือไม่
/**
* Tests if the given email has an associated direct member to the given group.
*
* @param {Group} group: Group resource to which the entity is being checked as
* a member
* @param {String} email: Email that can represent a Group or User entity
* @return {Boolean} isMember: Whether the entity is a direct member to the
* group or not
*/
function checkDirectGroupMembership(group, email) {
try {
groups.Memberships.lookup(group.name, {'memberKey.id': email});
} catch(e) {
// Log failure if exception is not related to membership existence
if (!e.message.includes('Membership does not exist.')) {
console.error(e);
}
return false;
}
return true;
}