Servicio avanzado de grupos de Cloud Identity

El servicio avanzado de Grupos de Cloud Identity (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 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 nuevo recurso de grupo. 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 el propietario del grupo.

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

En el siguiente ejemplo, se muestra una función auxiliar para crear un grupo:

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: "EMPTY" };

  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 consulta. Para buscar todos los grupos, proporciona el 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));
}

Agrega 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 superior. Para obtener el primer valor, busca el grupo con el 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);
  }
}

Cómo obtener membresías de un miembro

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

En el siguiente método auxiliar, se muestra un ejemplo de iteración a través de 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);
  }
}

Cómo obtener 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 para el que deseas enumerar a los miembros. Para encontrar el ID de un solo grupo, usa el método groups.lookup. Para ver todos los IDs de grupo de 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);
  }
}