Serviço avançado de grupos do Cloud Identity

acessar a API CIG no Apps Script.

O serviço avançado de grupos do Cloud Identity (CIG, na sigla em inglês) permite usar a API CIG no Google Apps Script.

Esse é um serviço avançado que precisa ser ativado antes do uso.

Referência

Para informações detalhadas sobre esse serviço, consulte a documentação de referência para a API CIG. Assim como todos os serviços avançados no Apps Script, o serviço avançado de CIG usa os mesmos objetos, métodos e parâmetros que a API pública. Para mais informações, consulte Como as assinaturas de método são determinadas.

Exemplo de código

As seguintes funções auxiliares usam a versão v1 da API.

Criar um grupo

Para criar um Grupo do Google, chame groups.create com uma instância do novo recurso de grupo. A instância do grupo precisa incluir um groupKey, parent e label definido como cloudidentity.googleapis.com/groups.discussion_forum. Você também precisa definir o parâmetro initialGroupConfig, que define o proprietário inicial do grupo. É possível usar os seguintes valores para esse parâmetro:

WITH_INITIAL_OWNER: torna a pessoa que envia a solicitação a proprietária do grupo.

EMPTY: cria um grupo sem proprietários iniciais. Só é possível usar esse valor se você for um superadministrador do Google Workspace ou um administrador do Grupos do Google. Para mais informações sobre as funções do Google Workspace, consulte Funções de administrador pré-criadas.

O exemplo a seguir mostra como criar um grupo para que o usuário seja o proprietário dele:

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

Pesquisar um grupo

Para pesquisar um Grupo do Google, chame groups.search com uma string de consulta. Para pesquisar todos os grupos, forneça o 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));
}

Adicionar uma assinatura a um grupo

Você pode criar assinaturas para um grupo depois de criá-lo. Esse método exige um membership recurso e a string name do recurso pai. O primeiro valor pode ser obtido por pesquisando o grupo pelo lookup método.

O método auxiliar a seguir mostra um exemplo de como adicionar uma assinatura a um grupo. expiryDetail é um campo opcional que pode ser adicionado para definir uma expiração para a assinatura. O valor de preferredMemberKey é o endereço de e-mail do membro.

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

Receber assinaturas de um membro

Use o groups.memberships.searchDirectGroups método para pesquisar os pais imediatos de um membro.

O método auxiliar a seguir mostra um exemplo de iteração nas assinaturas diretas de um membro.

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

Receber assinaturas de um grupo

Use o groups.memberships.list método para listar os membros de um grupo.

groupId: o ID numérico do grupo para o qual você quer listar os membros. Para encontrar o ID de um único grupo, use o groups.lookup método. Para conferir todos os IDs de grupo em um cliente ou namespace, use o groups.list método.

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