Saltar para a documentação
Ruby

Membros

`members.list`, `list_all`, `iterate`, `get`, `add`, `update`, `remove`, `grant_address`, `revoke_address` e os métodos de convites ao lado.

Todos os métodos

members.rb
support_role_id = "role_8b1f4c2e9a7d3b60e5f1a2c4"viewer_role_id = "role_2c7e9a1f4b8d3e60c5a7f1b9" invitation = client.members.add(  email: "[email protected]",  roleId: support_role_id,  addressIds: ["2b81de07-9c3f-4a61-b8e2-5d07f4c19a36"],  access: "member")puts invitation[:id], invitation[:expiresAt] people = client.members.list_allputs people.map { |person| "#{person[:email]} #{person[:userId]}" } sam_id = "q7Vd3kX9mT2pLw8RzN4bYc6HfJ1sGa5E"member = client.members.get(sam_id)puts member.dig(:role, :name), member[:implied] client.members.update(sam_id, roleId: viewer_role_id) address_id = "c40a95f2-1e7b-4d38-a6c9-82f05b3d7e14"client.members.grant_address(sam_id, addressId: address_id, access: "viewer")client.members.revoke_address(sam_id, address_id) removed = client.members.remove(sam_id)puts removed[:addressesRevoked]

Duas concessões por pessoa, que não podem ser fundidas numa só. role é o que a pessoa pode fazer. addresses é aquilo a que o pode fazer. Ambas têm de concordar: uma função com emails:send e access: "viewer" em invoices@ é alguém que pode enviar correio mas não o pode enviar a partir desse endereço. A exceção é uma função com addresses:all, que alcança todos os endereços, seja o que for que addresses liste, porque esse Array só contém concessões diretas. Por isso, verifique permissions antes de ler addresses como todo o alcance de alguém.

Todas as chamadas sobre uma pessoa recebem o seu userId como primeiro argumento, e não o seu email, por isso obtenha-o de list ou list_all, como faz o exemplo. add é a única exceção, porque convida um endereço: a pessoa só tem um userId depois de aceitar, e list_invitations acompanha o convite até lá. Os campos de um corpo de pedido mantêm os nomes em camelCase da API (roleId:, addressIds:, addressId:), passados como argumentos nomeados ou como um único Hash.

list devolve uma OpenEmail::Page, list_all devolve todos os membros num único Array, e iterate passa cada membro a um bloco ou devolve um Enumerator quando não há bloco. Um membro volta como um Hash com chaves Symbol, e role é um Hash dentro dele, por isso member.dig(:role, :name) lê o nome da função.

implied: true significa que ninguém escolheu o papel. Têm endereços e nenhuma linha de papel, por isso foi inferido a partir da concessão mais ampla que possuem. Trate-o como «ainda não decidido», e update é o que transforma a inferência numa decisão. Até lá, alargar o seu acesso a endereços alarga silenciosamente o que podem fazer.

O proprietário do espaço de trabalho é a primeira linha, marcada com isOwner: true, enquanto add, update e remove continuam a recusá-lo com member_is_owner, um 422 lançado como OpenEmail::ValidationError. Um espaço de trabalho não partilhado indica um membro em vez de nenhum, por isso exclua isOwner quando estiver a contar lugares: client.members.list_all.count { |member| !member[:isOwner] }.

remove retira ambos os eixos, a função E todas as concessões de endereço neste espaço de trabalho, e indica addressesRevoked. revoke_address é o mais restrito, para alguém que mudou de equipa e não para alguém que saiu.

Parâmetros

emailStringobrigatório
Quem convidar, aparado e passado a minúsculas. Ainda não precisa de conta: toda a gente é convidada, e o papel e as concessões chegam quando aceitam. Alguém que já esteja na workspace é `member_is_owner` (422).
roleIdStringobrigatório
A função que a pessoa vai ter, de 1 a 128 caracteres, e tem de ser uma função deste espaço de trabalho: um id desconhecido dá `role_not_found` (404), lançado como `OpenEmail::NotFoundError`. A função de proprietário não pode ser atribuída e volta como `role_immutable` (409), porque tornar alguém proprietário é uma transferência do espaço de trabalho e não há aqui nenhuma chamada para isso.
addressIdsArray<String>
Endereços que o convite transporta, no máximo 64 ids de 1 a 128 caracteres cada, concedidos quando é aceite. Cada id é verificado antes de qualquer escrita, por isso um que não seja um endereço desta workspace faz recusar a chamada inteira com 422 `member_not_found` e nada é enviado. Convidar o mesmo endereço outra vez dentro de dez minutos é 409 `invitation_too_soon`.
accessString
O que a pessoa pode fazer com cada id em `addressIds`: `member` lê o endereço e envia como ele, `viewer` apenas o lê. Por omissão é `member`, o nível que a consola e o antigo percurso de partilha sempre usaram, para que a mesma chamada signifique o mesmo a partir de um script e de um ecrã. Para conceder níveis diferentes, chame depois `grant_address` para os endereços que diferem.

Resposta

objectString
Sempre `member`. Uma remoção responde com o mesmo valor, o seu `userId`, `deleted: true` e `addressesRevoked`, e nenhum dos outros campos abaixo.
userIdString
O id da conta da pessoa, e o identificador que todas as outras chamadas de membros recebem como primeiro argumento: `get`, `update`, `remove` e ambas as chamadas de endereço. Adicionar alguém é a única chamada que funciona a partir de um email, porque quem adiciona um colega sabe o endereço dele e não o id.
emailString
O email na conta deles, ecoado tal como essa linha o guarda. Este recurso nunca o escreve, e a passagem a minúsculas em `add` aplica-se ao endereço que envia para a procura e não ao que volta. Depois do dono, a lista de membros é ordenada por ele e não por quando as pessoas entraram, porque a lista é lida para encontrar uma pessoa e não para ver o que mudou.
nameString or nil
O nome visível da pessoa, retirado da sua conta, onde a coluna tem sempre um valor. O nil no tipo é defensivo e não um estado que se tenha visto esta API produzir. Pertence à pessoa e não ao espaço de trabalho, por isso nada neste recurso o pode definir.
imageString or nil
O avatar da pessoa, retirado da sua conta, e nil quando não definiu nenhum.
role.idString or nil
O id da função que a pessoa tem, lido como `member.dig(:role, :id)`, ou nil quando ninguém a escolheu. Veja `implied`. Um nil aqui é o único caso em que `role` indica uma inferência em vez de uma decisão que alguém tomou.
role.nameString
O nome da função. Para um membro implícito, é o nome do modelo integrado a que o seu acesso corresponde, não uma linha deste espaço de trabalho.
role.builtinString or nil
Que função integrada é, `owner`, `admin`, `member`, `viewer`, `developer` ou `billing`, ou nil para uma personalizada. `owner` aparece apenas na linha do próprio proprietário, ao lado de `isOwner: true`. Atribuir essa função a alguém é recusado com `role_immutable` (409).
isOwnerBoolean
True em exatamente uma linha, a conta a que a workspace está associada. Têm todas as permissões independentemente do que diga a sua linha de papel, ordenam-se em primeiro lugar, e `add`, `update` e `remove` recusam-nos todos com `member_is_owner`. Exclua-os quando estiver a contar lugares.
impliedBoolean
True quando esta pessoa tem concessões de endereço e nenhuma linha de membro, por isso a sua função foi inferida em vez de escolhida: qualquer concessão `member` torna-a a função integrada Member, caso contrário Viewer. Nunca é true para o proprietário. Mostre-o como «implícita pelo acesso». Até um `update` transformar a inferência numa decisão, alargar o seu acesso a endereços alarga silenciosamente o que pode fazer.
permissionsArray<String>
As permissões da função copiadas para o membro, para que uma única leitura responda a «pode?» sem ir buscar a função. Para um membro implícito, vêm do MODELO integrado e não da linha de função deste espaço de trabalho, por isso editar a função integrada Member não muda o que um membro implícito tem.
addressesArray<Hash>
Os endereços que lhes foram dados, ordenados por endereço, cada um com o seu nível de acesso. Vazio para alguém com um papel e nenhuma concessão, que é o aspeto de um novo membro até lhe ser concedido um endereço, e é a falha certa a ter enquanto ainda está a decidir o que devem ver.
addresses[].addressIdString
O id do endereço, e o que `grant_address` e `revoke_address` recebem. Um id que não seja um endereço deste espaço de trabalho é recusado em ambos, em vez de se reportar uma revogação que nunca aconteceu.
addresses[].addressString
O endereço completo, em minúsculas, reconstruído a partir da sua parte local e do seu domínio.
addresses[].accessString
O que a pessoa pode fazer com este endereço em concreto: `member` lê-o e envia como ele, `viewer` apenas o lê. Tanto isto como a função têm de permitir um envio para que ele aconteça, por isso uma função com `emails:send` sobre uma concessão `viewer` não envia a partir de nada. A coluna guardada chama-se `role`, e é renomeada aqui para que um Hash não tenha duas chaves `role` tiradas de dois vocabulários.
createdAtString or nil
Quando a linha de membro da pessoa foi escrita, como String ISO 8601, e nil quando não existe linha de membro nenhuma. Esse nil descreve a mesma população que `implied: true`: pessoas que têm endereços de antes de as funções existirem e a quem ninguém deu uma função desde então.

Convites

invitations.rb
waiting = client.members.list_all_invitations waiting.each do |invitation|  client.members.resend_invitation(invitation[:id]) if invitation[:expired]end client.members.revoke_invitation("winv_6bb640f5b99e47deb758f1f5")

add responde com um convite, e estas são as chamadas que lhe dão seguimento. list_invitations devolve uma OpenEmail::Page dos convites que ninguém aceitou ainda, list_all_invitations devolve-os todos num único Array, e iterate_invitations passa cada um a um bloco ou devolve um Enumerator. resend_invitation volta a enviar um com uma nova ligação e mais catorze dias, e revoke_invitation retira-o. Um convite pendente não concede nada até ser aceite.

resend_invitation recusa o mesmo endereço duas vezes em dez minutos com 409 invitation_too_soon, e revoke_invitation recusa um convite que já tenha sido aceite com 409 invitation_accepted. Ambos são lançados como OpenEmail::ConflictError, por isso conflict? é true e code distingue-os.