Servicio avanzado de grupos de Cloud Identity

El servicio avanzado de Cloud Identity Groups (CIG) te permite usar la API de CIG en Apps Script.

Referencia

Para obtener información detallada sobre este servicio, consulta la documentación de referencia de la API de CIG. Al igual que todos los servicios avanzados de Apps Script, el servicio avanzado de CIG usa los mismos objetos, métodos y parámetros que la API pública. Para obtener más información, consulta Cómo se determinan las firmas de los métodos.

Código de muestra

Las siguientes funciones auxiliares usan la versión v1 de la API.

Crear un grupo

Para crear un Grupo de Google, llama a groups.create con una instancia del recurso del grupo nuevo. La instancia de grupo debe incluir una groupKey, un parent y un label establecidos en cloudidentity.googleapis.com/groups.discussion_forum. También debes configurar el parámetro initialGroupConfig, que define el propietario inicial del grupo. Puedes usar los siguientes valores para este parámetro:

WITH_INITIAL_OWNER: Hace que la persona que envía la solicitud sea la propietaria del grupo.

EMPTY: Crea un grupo sin propietarios iniciales. Solo puedes usar este valor si eres administrador avanzado o administrador de grupos de Google Workspace. Para obtener más información sobre los roles de Google Workspace, consulta Roles de administrador precompilados.

En el siguiente ejemplo, se muestra cómo crear un grupo de modo que el usuario sea el propietario:

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);
  }
}

Cómo buscar un grupo

Para buscar un Grupo de Google, llama a groups.search con una cadena de búsqueda. Para buscar todos los grupos, proporciona 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));
}

Cómo agregar una membresía a un grupo

Una vez que exista un grupo, puedes crearle membresías. Este método requiere un recurso membership y la cadena name del recurso principal. El primer valor se puede obtener buscando el grupo a través del método lookup.

En el siguiente método auxiliar, se muestra un ejemplo de cómo agregar una membresía a un grupo. expiryDetail es un campo opcional que se puede agregar para establecer un vencimiento para la membresía. El valor de preferredMemberKey es la dirección de correo electrónico del miembro.

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);
  }
}

Obtener membresías de un miembro

Usa el método groups.memberships.searchDirectGroups para buscar los padres inmediatos de un miembro.

El siguiente método auxiliar muestra un ejemplo de cómo iterar las membresías directas de un miembro determinado.

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);
  }
}

Obtén membresías de un grupo

Usa el método groups.memberships.list para enumerar los miembros de un grupo.

groupId: Es el ID numérico del grupo cuyos miembros deseas enumerar. Para encontrar el ID de un solo grupo, usa el método groups.lookup. Para ver todos los IDs de grupo en un cliente o espacio de nombres, usa el método 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);
  }
}