멤버
`members.list`, `get`, `add`, `update`, `remove`, `grantAddress`, `revokeAddress`.
모든 메서드
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`와 같은 집단을 가리킵니다. 역할 제도가 생기기 전부터 주소 권한을 갖고 있었고 그 뒤로 아무도 역할을 주지 않은 사람들입니다.