Bir adres yetkisi ver ve geri al
İkinci eksen: bir kişinin hangi adreslere, hangi düzeyde erişebileceği.
Bu sayfadaki 2 çağrının herhangi birini kendi anahtarınızla çalışma alanınıza karşı çalıştırır.
POST /members/{userId}/addresses
İkinci eksen: bir kişinin hangi adreslere, hangi düzeyde erişebileceği.
Yetki, rol değildir
access, adres başına kullanılan daha eski sözlüktür ve izin adlarıyla bilerek örtüşmez: member adresi okur ve onun adına gönderir, viewer yalnızca okur. Kişinin gönderim yapıp yapamayacağı hakkında hiçbir şey söylemez; bunu rolü belirler ve bir gönderim gerçekleşmeden önce ikisinin de izin vermesi gerekir.
| Rolü | billing@ üzerindeki yetkisi | billing@ adına gönderebilir mi |
|---|---|---|
| `emails:send` var | member | Evet. |
| `emails:send` var | viewer | Hayır, yetki buna izin vermez. |
| `emails:send` yok | member | Hayır, rol buna izin vermez. |
| `emails:send` var | hiç yetki yok | Hayır, adres gönderimin karşılaştırıldığı listeye hiç girmez. |
Birine rol vermek ona adres vermez. Rolü olan ama yetkisi olmayan bir üye, herkesinkini değil BOŞ bir posta kutusu açar; neyi görmeleri gerektiğine henüz karar verirken yaşanması gereken doğru hata da budur.
Bir adres yetkisi ver
members:write gerektirir. { addressId, access } ile POST /members/{userId}/addresses; access varsayılan olarak member'dır. Üyenin güncel hâlinin tamamını döndürür.
curl -X POST "$OE/members/nQ8vBz1aRd4tYwKx7fQ2mN8vBz1aRd4t/addresses" -H "$AUTH" \ -H "Content-Type: application/json" \ -d '{ "addressId": "c40a95f2-1cc6-4d31-82a8-9e075d31c2a8", "access": "viewer" }'{ "object": "member", "userId": "nQ8vBz1aRd4tYwKx7fQ2mN8vBz1aRd4t", "email": "[email protected]", "name": "Sam Okonjo", "image": null, "role": { "id": "role_2b81de079c1f0a4b7e05d386", "name": "Support", "builtin": null }, "implied": false, "permissions": ["emails:send", "emails:read", "threads:read", "threads:write"], "addresses": [ { "addressId": "2b81de07-9c1f-4a4b-8e05-d3862c1f0a44", "address": "[email protected]", "access": "member" }, { "addressId": "c40a95f2-1cc6-4d31-82a8-9e075d31c2a8", "address": "[email protected]", "access": "viewer" } ], "createdAt": "2026-08-12T14:20:00.000Z" }Çift üzerinde PUT yerine alt koleksiyon üzerinde POST, çünkü her hâlükârda bir upsert'tir ve satır id'si çağıranın adlandıracağı bir şey değildir. Farklı bir access ile yeniden POST etmek, bir viewer'ı member yapmanın yoludur: (adres, kişi) başına tek satır vardır, bu yüzden ikinci çağrı ikinci bir yetki eklemek yerine düzeyi değiştirir. Bu da onu tekrarlanması güvenli, ender POST'lardan biri yapar.
Adresin sahibi olmaya değil members:write iznine bağlıdır; alan adları yönlendiricisindeki eski yetki yolundan farkı budur. Sahiplik, alan adını ekleyen kişi için doğru kapıdır; hiçbir şeyin sahibi olmayan ve çalışma alanının erişimini sahip adına yöneten bir yönetici için yanlış kapıdır. İkisi de aynı satırı yazar.
Yalnızca yetki değil üyenin tamamı geri döner; böylece ekrandaki satır ikinci bir istek olmadan yeniden çizilebilir ve yanıt, yetki yeni de olsa değiştirilmiş de olsa aynı okunur.
Bu çalışma alanında olmayan bir adres member_not_found, param: "addressId" taşıyan bir 422'dir. Bir anahtar yalnızca kendisi için verildiği çalışma alanına ait adresleri dağıtabilir.
Çalışma alanı SAHİBİNE yetki vermek member_is_owner, bir 422'dir. Sahip zaten üzerindeki her adrese sahiptir; çağrının ekleyebileceği bir şey yoktur.
Bir adres yetkisini geri al
members:write gerektirir. DELETE /members/{userId}/addresses/{addressId}. Üyeyi, o adres çıkarılmış hâliyle döndürür.
curl -X DELETE \ "$OE/members/nQ8vBz1aRd4tYwKx7fQ2mN8vBz1aRd4t/addresses/c40a95f2-1cc6-4d31-82a8-9e075d31c2a8" \ -H "$AUTH"{ "object": "member", "userId": "nQ8vBz1aRd4tYwKx7fQ2mN8vBz1aRd4t", "email": "[email protected]", "name": "Sam Okonjo", "image": null, "role": { "id": "role_2b81de079c1f0a4b7e05d386", "name": "Support", "builtin": null }, "implied": false, "permissions": ["emails:send", "emails:read", "threads:read", "threads:write"], "addresses": [ { "addressId": "2b81de07-9c1f-4a4b-8e05-d3862c1f0a44", "address": "[email protected]", "access": "member" } ], "createdAt": "2026-08-12T14:20:00.000Z" }Dar kapsamlı geri alma; biri ekip değiştirdiğinde başvurulacak olan budur: rolünü ve diğer adreslerini korur, yalnızca bu adresi görmeyi bırakır.
Bu çalışma alanında olmayan bir adres sessizce yok sayılmaz, reddedilir. Aksi hâlde id'deki bir yazım hatası, hiç gerçekleşmemiş bir geri almayı başarılı gösterirdi; bu uç nokta tam da bunu önlemek için vardır.
Bir mezar taşı yerine üye geri döner, çünkü asıl ilginç yanıt hâlâ nelere erişebildiğidir. Burada bir { deleted: true }, istemciyi bunu çıkarma yoluyla hesaplamaya bırakırdı.
Her şeyi bir kerede geri almak için DELETE /members/{userId} rolü ve tüm yetkileri birlikte kaldırır ve kaçının gittiğini bildirir.