Üyeler
`members.list`, `list_all`, `iterate`, `get`, `add`, `update`, `remove`, `grant_address`, `revoke_address` ve yanlarındaki davet metotları.
Her yöntem
from openemail import openemail roles = openemail.roles.list_all()support = next(role for role in roles if role['name'] == 'Support')viewer = next(role for role in roles if role['builtin'] == 'viewer') invitation = openemail.members.add({ 'email': '[email protected]', 'roleId': support['id'], 'addressIds': ['2b81de07-…'], 'access': 'member',}) people = openemail.members.list_all()sam = next(person for person in people if person['email'] == '[email protected]')member = openemail.members.get(sam['userId']) openemail.members.update(sam['userId'], {'roleId': viewer['id']}) openemail.members.grant_address(sam['userId'], { 'addressId': 'c40a95f2-…', 'access': 'viewer',})openemail.members.revoke_address(sam['userId'], 'c40a95f2-…') openemail.members.remove(sam['userId'])Kişi başına iki yetki vardır ve bunlar birleştirilmemelidir. role ne yapabilecekleridir; addresses ise bunu neye yapabilecekleridir. İkisinin de uyuşması gerekir: invoices@ üzerinde 'access': 'viewer' varken emails:send içeren bir rol tutan kişi, posta gönderebilen ama o adresten gönderemeyen biridir. İstisna, addresses:all taşıyan bir roldür: addresses ne listelerse listelesin her adrese erişir, çünkü o dizi yalnızca doğrudan verilen yetkileri tutar; bu yüzden onu birinin erişiminin tamamı diye okumadan önce permissions alanına bakın.
Her metot e-postayı değil userId değerini alır. Tek istisna add'dir, çünkü bir adresi davet eder: kişinin userId değeri ancak daveti kabul ettiğinde oluşur ve o zamana kadar daveti list_invitations izler.
'implied': True, rolü kimsenin seçmediği anlamına gelir. Kişinin adresleri vardır ama rol satırı yoktur; dolayısıyla rol, sahip olduğu en geniş yetkiden çıkarılmıştır. Bunu “henüz karara bağlanmadı” olarak ele alın; çıkarımı bir karara dönüştüren şey update'tir. O zamana kadar, adres erişimini genişletmek ne yapabileceklerini de sessizce genişletir.
Çalışma alanı sahibi ilk satırdır ve 'isOwner': True ile işaretlenir; buna karşın add, update ve remove onu member_is_owner ile reddetmeyi sürdürür. Paylaşılmamış bir çalışma alanı sıfır değil bir üye bildirir; dolayısıyla koltuk sayarken isOwner olanı dışarıda bırakın.
remove her iki ekseni birden alır: rolü VE bu çalışma alanındaki her adres yetkisini; ardından addressesRevoked değerini bildirir. revoke_address ise dar olanıdır; ayrılan biri için değil, ekip değiştiren biri içindir.
Parametreler
emailstrzorunlu- Kimin davet edileceği; kırpılır ve küçük harfe çevrilir. Henüz bir hesabının olması gerekmez: herkes davet edilir, rol ve yetkiler daveti kabul ettiklerinde yerine oturur. Çalışma alanında zaten bulunan biri `member_is_owner` (422) verir.
roleIdstrzorunlu- Tutacakları rol, 1 ila 128 karakter; bu çalışma alanında var olan bir rol olmalıdır: bilinmeyen bir id `role_not_found` (404) verir. Owner rolü dağıtılamaz ve `role_immutable` (409) döner, çünkü birini sahip yapmak bir çalışma alanı devridir ve bunun için burada bir çağrı yoktur.
addressIdslist[str]- Davetin taşıdığı adresler; her biri 1 ila 128 karakter olan en fazla 64 id, davet kabul edildiğinde verilir. Herhangi bir şey yazılmadan önce her id denetlenir; bu yüzden bu çalışma alanında adres olmayan tek bir id bile tüm çağrının 422 `member_not_found` ile reddedilmesine yol açar ve hiçbir şey gönderilmez. Aynı adresi on dakika içinde yeniden davet etmek 409 `invitation_too_soon` verir.
accessLiteral['member', 'viewer']- `addressIds` içindeki her id ile ne yapabilecekleri: `member` adresi okur ve o adresten gönderir, `viewer` yalnızca okur. Varsayılan `member`'dır; konsolun ve eski paylaşım yolunun hep kullandığı düzeydir, böylece aynı çağrı bir betikten de bir ekrandan da aynı anlama gelir. Karışık yetki vermek için farklı olanlara sonradan `grant_address` çağırın.
Yanıt
objectLiteral['member']- Her zaman `member`. Bir kaldırma işlemi de aynı değerle, kişinin `userId` değeri, `'deleted': True` ve `addressesRevoked` ile yanıt verir; aşağıdaki diğer alanların hiçbiriyle değil.
userIdstr- Kişinin hesap id'si; diğer tüm üye çağrılarının yolda aldığı tanıtıcıdır: get, update, remove ve iki adres çağrısı. Birini eklemek, e-posta ile çalışan tek çağrıdır; çünkü bir iş arkadaşını ekleyen kişi onun adresini bilir, id'sini değil.
emailstr- Hesaplarındaki e-posta, o satırın sakladığı hâliyle yansıtılır. Bu kaynak onu asla yazmaz ve `add` üzerindeki küçük harfe çevirme, geri dönen değere değil arama için gönderdiğiniz adrese uygulanır. Sahipten sonra üye listesi, kimin ne zaman katıldığına göre değil bu alana göre sıralanır; çünkü liste neyin değiştiğini görmek için değil bir kişiyi bulmak için okunur.
namestr | None- Görünen adları; sütunun NOT NULL olduğu hesaplarından alınır. Türdeki `None`, bu API'nin ürettiği görülmüş bir durum değil, savunma amaçlıdır. Ad çalışma alanına değil kendilerine aittir; dolayısıyla bu kaynaktaki hiçbir şey onu ayarlayamaz.
imagestr | None- Avatarları; hesaplarından alınır ve ayarlamadılarsa null.
role.idstr | None- Tuttukları rolün id'si ya da rolü kimse seçmediyse null. `implied` alanına bakın. Buradaki null, `role` alanının birinin verdiği bir kararı değil bir çıkarımı bildirdiği tek durumdur.
role.namestr- Rolün adı. Çıkarımsal bir üyede bu, erişimlerinin çözümlendiği yerleşik şablonun adıdır; bu çalışma alanındaki bir satır değil.
role.builtinLiteral['owner', 'admin', 'member', 'viewer', 'developer', 'billing'] | None- Rolün hangi yerleşik rol olduğu ya da özel bir rolse null. `owner` yalnızca sahibin kendi satırında, `'isOwner': True` ile birlikte görünür; bu rolü herhangi birine atamak `role_immutable` (409) ile reddedilir.
isOwnerbool- Tam olarak bir satırda true olur: çalışma alanının bağlı olduğu hesap. Rol satırları ne derse desin her izne sahiptirler, ilk sırada yer alırlar ve `add`, `update` ve `remove` üçü de onları `member_is_owner` ile reddeder. Koltuk sayarken onları hariç tutun.
impliedbool- Bu kişinin adres yetkileri olup üye satırı yoksa true olur; yani rolü seçilmemiş, çıkarılmıştır: herhangi bir `member` yetkisi yerleşik Member rolüne, aksi hâlde Viewer'a çözümlenir. Sahip için asla true olmaz. Bunu “erişimden çıkarıldı” olarak gösterin. Bir PATCH çıkarımı bir karara dönüştürene kadar, adres erişimlerini genişletmek ne yapabileceklerini de sessizce genişletir.
permissionslist[Permission]- Rolün izinlerinin üyenin üzerine düzleştirilmiş hâli; böylece tek bir okuma, rolü getirmeden “yapabilir mi?” sorusunu yanıtlar. Çıkarımsal bir üyede bu izinler, bu çalışma alanının rol satırından değil yerleşik ŞABLONDAN gelir; dolayısıyla yerleşik Member rolünü düzenlemek, çıkarımsal bir üyenin sahip olduklarını değiştirmez.
addresseslist[MemberAddressResource]- Kendilerine verilen adresler, adrese göre sıralı, her biri kendi erişim düzeyiyle. Rolü olup hiç yetkisi olmayan biri için boştur; bir adres verilene kadar yeni bir üye böyle görünür ve ne görmeleri gerektiğine hâlâ karar verirken olması gereken doğru başarısızlık budur.
addresses[].addressIdstr- Adresin id'si; `grant_address` ve `revoke_address` çağrılarının aldığı değerdir. Bu çalışma alanında adres olmayan bir id, hiç gerçekleşmemiş bir iptali bildirmek yerine her ikisinde de reddedilir.
addresses[].addressstr- Tam adres, küçük harfli; local part'ı ve alan adından yeniden kurulur.
addresses[].accessLiteral['member', 'viewer']- Bu tek adresle ne yapabilecekleri: `member` adresi okur ve o adresten gönderir, `viewer` yalnızca okur. Bir gönderimin gerçekleşmesi için hem bu hem de rol izin vermelidir; dolayısıyla `viewer` yetkisi üzerinde `emails:send` içeren bir rol hiçbir yerden gönderim yapamaz. Saklanan sütunun adı `role`'dür ve tek bir nesnenin iki farklı sözlükten gelen iki `role` taşımaması için burada yeniden adlandırılmıştır.
createdAtstr | None- Üye satırlarının ne zaman yazıldığı, ISO-8601; hiç üye satırı yoksa null. Bu null, `'implied': True` ile aynı kitleyi tanımlar: roller var olmadan önceki dönemden adres tutan ve o zamandan beri kimsenin rol vermediği kişiler.
Davetler
from openemail import openemail waiting = openemail.members.list_all_invitations() for invitation in waiting: if invitation['expired']: openemail.members.resend_invitation(invitation['id']) openemail.members.revoke_invitation('winv_6bb640f5b99e47deb758f1f5')add bir davetle yanıt verir ve onu izleyen çağrılar şunlardır: list_invitations, list_all_invitations ve iterate_invitations henüz kimsenin kabul etmediklerini okur, resend_invitation birini yeni bir bağlantı ve on dört gün daha ile yeniden gönderir, revoke_invitation ise geri çeker. Bekleyen bir davet kabul edilene kadar hiçbir şey vermez.
resend_invitation aynı adresi on dakika içinde ikinci kez 409 invitation_too_soon ile reddeder, revoke_invitation ise önce kabul edilmiş bir daveti 409 invitation_accepted ile reddeder.
Doğrulama kodları
add, update, remove, grant_address ve revoke_address, herhangi bir şeyi değiştirmeden önce bir OAuth erişim tokenından doğrulama kodu ister; resend_invitation ve revoke_invitation ise istemez. Çağrı, is_step_up_required değeri True olan bir OpenEmailApiError fırlatır: security.begin_step_up() ile bir kod isteyin, kişinin size verdiği kodu security.verify_step_up({'code': ...}) ile denetleyin, sonra çağrıyı yeniden yapın. Bir doğrulama 60 dakika geçerlidir ve bir API anahtarından asla istenmez.
Referans
members.list()Tam başvurumembers.list_all()Tam başvurumembers.iterate()Tam başvurumembers.get()Tam başvurumembers.add()Tam başvurumembers.update()Tam başvurumembers.remove()Tam başvurumembers.grant_address()Tam başvurumembers.revoke_address()Tam başvurumembers.list_invitations()Tam başvurumembers.list_all_invitations()Tam başvurumembers.iterate_invitations()Tam başvurumembers.resend_invitation()Tam başvurumembers.revoke_invitation()Tam başvuru