Repository navigation
Yetki Tenant ve Sahiplik
English · Türkçe · Languages / Diller
Kapsam: JSON API Forge 0.5.1 · İnceleme: 17 Eylül 2026 · Dil: Türkçe
Kimlik doğrulama çağıranın kim olduğunu, yetkilendirme hangi işlemi hangi veri üzerinde yapabileceğini belirler. Forge principal'ı kimlik türü, subject, roller, izinler ve isteğe bağlı tenant bilgisini taşır.
{
"roles": {
"reader": {"permissions": ["notes.list", "notes.read"]},
"writer": {"inherits": ["reader"], "permissions": ["notes.create", "notes.update"]}
}
}İzin adlarını iş sözleşmenizin parçası olarak sürümleyin. notes.* veya * geniş kapsamlıdır. Role inheritance geçişlidir; döngü ve bilinmeyen roller doğrulama konusu olur. Endpointin permission alanını boş bırakmak public yapmak için genel yöntem değildir; destekleyen endpoint türünde açık public=true gerekir.
Bir kaynakta tenant_field principal'ın tenant değerini, owner_field principal subject'ini kullanır. Örneğin:
{
"tenant_field": "tenant_id",
"owner_field": "owner_id",
"owner_actions": ["list", "read", "update", "delete"],
"owner_bypass_permission": "notes.owner.bypass"
}Bu bir resource'a eklenecek parçadır, tek başına tam resource değildir. İlgili kolonların şemada var olması gerekir. Tenant/owner/soft-delete alanlarını writable_fields listesinden çıkarın; istemcinin body içindeki tenant_id değerini yetki kaynağı kabul etmeyin.
Tenant alanı yapılandırılmışsa gerekli tenant bilgisi bulunmayan principal'ın erişimi engellenir. Owner ile tenant farklı soruları cevaplar: "hangi müşterinin verisi?" ve "hangi kimliğin kaydı?". İkisi birlikte kullanılabilir.
Generic CRUD'un otomatik row politikası, sizin yazdığınız bütün SQL metinlerine veya hook koduna kendiliğinden eklenmez. RPC'de gerekiyorsa:
{
"sql": "UPDATE notes SET title = :title WHERE id = :id AND tenant_id = :tenant AND owner_id = :owner",
"mode": "execute",
"params": {
"id": "$body.id", "title": "$body.title",
"tenant": "$principal.tenant_id", "owner": "$principal.subject"
},
"require_rowcount_min": 1,
"require_rowcount_max": 1
}Bu statement örneği uygun tablo, giriş şeması ve operation izni gerektirir. Tenant/owner'ı body'den almak aynı güven sınırını sağlamaz.
- İzinli principal kendi tenant ve kendi kaydını okuyup değiştirebilir.
- Aynı role sahip başka tenant o satırı göremez.
- Aynı tenant içindeki farklı owner beklenen kısıtlamaya tabidir.
- Bypass izni sadece açıkça verilen kimlikte çalışır; cache sonucu farklı kullanıcıya taşınmaz.
Görünmeyen satırlar için 404, izin yetersizliğinde 403 gibi davranışları gerçek endpoint üzerinden test edin. Editör rol sistemi ayrı rank/kapsam modelidir; ekip rehberi ile karıştırmayın.
Bu sayfa aşağıdaki sabit commitlerdeki davranışı açıklar. Yeni bir sürümde aynı davranışın sürdüğünü varsaymayın.
main/framework/security.pymain/framework/crud.pymain/framework/mongo.pymain/docs/29-Row-Ownership-and-Authorization.md