سرویس پیشرفته Cloud Identity Groups (CIG) برابری ویژگی ها را به API Service Groups ارائه می دهد و می تواند به جای آن استفاده شود.
روش های کمکی ارائه شده را مشاهده کنید تا نحوه دستیابی به قابلیت های معادل از طریق سرویس پیشرفته CIG را بیاموزید.
راه اندازی
برای استفاده از CIG Advanced Service، ابتدا آن را در پروژه اسکریپت خود فعال کنید .
برای کوتاه کردن برخی از امضاهای متد در این راهنما، متغیر زیر را تعریف کردیم:
const groups = CloudIdentityGroups.Groups;
روش های GroupsApp
روشهای کمکی زیر با روشهای Groups Service GroupsApp
مطابقت دارند.
در این راهنما، اصطلاح گروه به یک منبع گروه اشاره دارد، در مقابل یک شی کلاس گروه . منابع گروهی اشیایی جاوا اسکریپتی هستند که متد ندارند، اما میتوان از آنها در سرویس پیشرفته CIG برای بازیابی اطلاعات مشابه با اشیاء کلاس گروه استفاده کرد.
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
روش کمکی زیر فهرستی از منابع عضویت را برمی گرداند. به فیلد group
یک عنصر دسترسی پیدا کنید تا شناسه نام آن را پیدا کنید. این برای بسیاری از روش های CIG Advanced Service مفید است. به طور مشابه، به 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
مطابقت دارند.
دریافت ایمیل
/**
* 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
Service Groups، میتوانیم عضویتها را بر اساس Type
آنها فیلتر کنیم. ما با ارائه یک View
FULL
به عنوان پارامتر پرس و جو در 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
در حالی که Groups Service ممکن است فقط بالاترین اولویت را در 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
تایید می کنند که آیا موجودیت عضو یک گروه معین است یا خیر. با توجه به اینکه هر دو گروه و کاربر را می توان با یک آدرس ایمیل نشان داد، از روش زیر می توان برای تأیید تعلق هر یک به یک گروه خاص استفاده کرد.
/**
* 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;
}