문서로 건너뛰기
SDK

멤버

`members.list`, `get`, `add`, `update`, `remove`, `grantAddress`, `revokeAddress`.

모든 메서드

members.ts
const people = await openemail.members.list()const member = await openemail.members.get(people[0]!.userId) const sam = await openemail.members.add({  email: '[email protected]',  roleId: support.id,  addressIds: ['2b81de07-…'],  access: 'member',}) await openemail.members.update(sam.userId, { roleId: viewerRoleId }) await openemail.members.grantAddress(sam.userId, {  addressId: 'c40a95f2-…',  access: 'viewer',})await openemail.members.revokeAddress(sam.userId, 'c40a95f2-…') await openemail.members.remove(sam.userId)

한 사람에게는 두 가지 권한이 주어지며, 이 둘을 하나로 합쳐서는 안 됩니다. role은 무엇을 해도 되는지이고, addresses는 그것을 어떤 대상에 할 수 있는지입니다. 둘 다 허용해야 합니다. emails:send를 가진 역할을 갖고 있으면서 invoices@에 대해서는 access: "viewer"인 사람은, 메일을 보낼 수는 있지만 그 주소에서는 보낼 수 없는 사람입니다.

모든 메서드는 이메일이 아니라 userId를 받습니다. add만 예외인데, 그 예외의 이유가 곧 그 호출이 하는 일의 절반입니다. 호출하는 쪽에는 이메일 주소만 있고 아직 사용자 id가 없기 때문입니다.

implied: true는 아무도 역할을 고르지 않았다는 뜻입니다. 주소 권한만 있고 역할 행은 없어서, 가진 권한 중 가장 넓은 것에서 역할을 추론한 것입니다. “아직 정해지지 않음”으로 취급하십시오. 추론을 결정으로 바꾸는 것은 update입니다. 그전까지는 주소 접근 권한을 넓히면 그 사람이 할 수 있는 일도 조용히 함께 넓어집니다.

워크스페이스 소유자는 첫 번째 행이며 isOwner: true로 표시되고, add, update, remove는 여전히 member_is_owner로 소유자를 거부합니다. 공유되지 않은 워크스페이스도 멤버가 없다고 보고하지 않고 한 명으로 보고하므로, 좌석 수를 셀 때는 isOwner를 제외하십시오.

remove는 두 축을 모두 가져갑니다. 역할과 이 워크스페이스의 모든 주소 권한을 함께 회수하고 addressesRevoked를 보고합니다. revokeAddress는 좁은 쪽으로, 회사를 떠난 사람이 아니라 팀을 옮긴 사람을 위한 호출입니다.

파라미터

emailstring필수
초대할 대상이며, 앞뒤 공백을 제거하고 소문자로 변환합니다. 아직 계정이 없어도 됩니다. 누구든 초대할 수 있고, 역할과 권한은 초대를 수락할 때 적용됩니다. 이미 워크스페이스에 있는 사람은 `member_is_owner`(422)입니다.
roleIdstring필수
그 사람이 가질 역할이며 1자에서 128자입니다. 이 워크스페이스에 존재하는 역할이어야 하며, 알 수 없는 id는 `role_not_found`(404)입니다. 소유자 역할은 넘겨줄 수 없어 `role_immutable`(409)로 돌아옵니다. 누군가를 소유자로 만드는 것은 워크스페이스 양도이고, 여기에는 그런 호출이 없기 때문입니다.
addressIdsstring[]
같은 호출에서 함께 넘겨줄 주소이며, 각각 1자에서 128자인 id를 최대 64개까지 지정할 수 있습니다. 이 워크스페이스의 주소가 아닌 id는 거부됩니다. 역할이 먼저 기록되고 권한이 하나씩 뒤따르므로, 잘못된 id가 있으면 요청한 것보다 적은 주소를 가진 멤버가 생성된 채 남습니다. 두 쓰기 모두 upsert이므로 같은 본문을 다시 POST하면 해결됩니다.
access'member' | 'viewer'
`addressIds`에 담긴 모든 id에 대해 무엇을 할 수 있는지입니다. `member`는 주소를 읽고 그 주소로 보낼 수 있으며, `viewer`는 읽기만 합니다. 기본값은 `member`로, 콘솔과 기존 공유 경로가 늘 사용해 온 수준입니다. 덕분에 스크립트에서든 화면에서든 같은 호출이 같은 의미를 갖습니다. 서로 다른 수준을 섞으려면 예외로 둘 주소에 대해 나중에 `grantAddress`를 호출하십시오.

응답

object'member'
항상 `member`입니다. 삭제 호출도 같은 값과 함께 해당 사용자의 `userId`, `deleted: true`, `addressesRevoked`만 돌려주고, 아래의 다른 필드는 돌려주지 않습니다.
userIdstring
그 사람의 계정 id이며, 다른 모든 멤버 호출이 경로에서 받는 값입니다. get, update, remove와 두 주소 호출이 모두 이 값을 씁니다. 동료를 추가하는 호출만 대신 이메일로 동작하는데, 동료를 추가하는 사람은 상대의 주소는 알아도 id는 모르기 때문입니다.
emailstring
그 사람 계정에 등록된 이메일이며, 해당 행에 저장된 그대로 돌려줍니다. 이 리소스는 이 값을 기록하지 않으며, `add`에서의 소문자 변환은 조회를 위해 보낸 주소에 적용될 뿐 돌아오는 값에 적용되는 것이 아닙니다. 멤버 목록은 소유자 다음부터 가입 시점이 아니라 이 값을 기준으로 정렬됩니다. 이 목록은 무엇이 바뀌었는지 보려고가 아니라 특정 한 사람을 찾으려고 읽기 때문입니다.
namestring | null
그 사람 계정에서 가져온 표시 이름이며, 해당 컬럼은 NOT NULL입니다. 타입에 있는 null은 방어적인 것일 뿐 이 API에서 실제로 관측된 상태는 아닙니다. 이 값은 워크스페이스가 아니라 그 사람에게 속하므로, 이 리소스로는 아무것도 설정할 수 없습니다.
imagestring | null
그 사람 계정에서 가져온 아바타이며, 설정하지 않았으면 null입니다.
role.idstring | null
그 사람이 가진 역할의 id이며, 아무도 고르지 않았으면 null입니다. `implied`를 참고하십시오. 여기가 null인 경우가, `role`이 누군가의 결정이 아니라 추론을 보고하는 유일한 경우입니다.
role.namestring
역할의 이름입니다. 추론된 멤버의 경우 이 워크스페이스의 행이 아니라, 그 사람의 접근 권한이 해석된 내장 템플릿의 이름입니다.
role.builtin'owner' | 'admin' | 'member' | 'viewer' | 'developer' | 'billing' | null
이 역할이 어떤 내장 역할인지이며, 사용자 정의 역할이면 null입니다. `owner`는 소유자 본인의 행에만 `isOwner: true`와 함께 나타나며, 그 역할을 누군가에게 부여하려 하면 `role_immutable`(409)로 거부됩니다.
isOwnerboolean
정확히 한 행에서만 true이며, 워크스페이스가 귀속된 계정입니다. 역할 행이 무엇이라고 하든 모든 권한을 가지며, 정렬 시 가장 앞에 오고, `add`, `update`, `remove`는 모두 `member_is_owner`로 거부합니다. 좌석 수를 셀 때는 제외하십시오.
impliedboolean
주소 권한은 있는데 멤버 행이 없어 역할이 선택된 것이 아니라 추론된 경우 true입니다. `member` 권한이 하나라도 있으면 내장 Member로, 그렇지 않으면 Viewer로 해석됩니다. 소유자에게는 절대 true가 되지 않습니다. “접근 권한에서 추론됨”으로 표시하십시오. PATCH로 추론을 결정으로 바꾸기 전까지는, 주소 접근 권한을 넓히면 그 사람이 할 수 있는 일도 조용히 함께 넓어집니다.
permissionsPermission[]
역할의 권한을 멤버에 펼쳐 놓은 것으로, 역할을 따로 조회하지 않고도 한 번의 읽기로 “이 사람이 해도 되는가?”에 답할 수 있습니다. 추론된 멤버의 경우 이 워크스페이스의 역할 행이 아니라 내장 TEMPLATE에서 가져오므로, 내장 Member 역할을 수정해도 추론된 멤버가 가진 권한은 달라지지 않습니다.
addressesMemberAddress[]
그 사람에게 부여된 주소이며 주소 기준으로 정렬되고, 각각 자체 접근 수준을 갖습니다. 역할만 있고 권한이 없는 사람은 비어 있습니다. 주소가 부여되기 전의 새 멤버가 바로 그 모습이며, 무엇을 보여 줄지 아직 정하는 중이라면 그것이 올바른 상태입니다.
addresses[].addressIdstring
주소의 id이며, `grantAddress`와 `revokeAddress`가 받는 값입니다. 이 워크스페이스의 주소가 아닌 id는 두 호출 모두에서 거부되며, 일어나지도 않은 회수를 보고하는 일은 없습니다.
addresses[].addressstring
로컬 파트와 도메인을 다시 조합한 전체 주소이며, 소문자로 표기됩니다.
addresses[].access'member' | 'viewer'
이 주소 하나에 대해 무엇을 할 수 있는지입니다. `member`는 읽고 그 주소로 보낼 수 있으며, `viewer`는 읽기만 합니다. 발송이 일어나려면 이 값과 역할이 모두 허용해야 하므로, `emails:send`를 가진 역할이라도 `viewer` 권한 위에서는 어떤 주소로도 보내지 못합니다. 저장된 컬럼 이름은 `role`이지만, 한 객체가 서로 다른 어휘에서 온 `role`을 두 개 들고 있지 않도록 여기서는 이름을 바꿨습니다.
createdAtstring | null
멤버 행이 기록된 시각이며 ISO-8601입니다. 멤버 행이 아예 없으면 null입니다. 이 null은 `implied: true`와 같은 집단을 가리킵니다. 역할 제도가 생기기 전부터 주소 권한을 갖고 있었고 그 뒤로 아무도 역할을 주지 않은 사람들입니다.