6GEN / Sistem Kaydı / Altyapı
Policy
Ürün, principal, rol, permission ve scope kayıtlarını kullanarak erişim kararları üreten Go tabanlı authorization servisi.
Problem
Bir uygulamanın erişim kararları yalnızca bir kullanıcı kaydısına bağlandığında, ürün bağlamı, permission tanımı, rol ataması ve kaynak kapsamı aynı karar içinde görünür kalmaz. Policy bu kayıtları ayrı bir serviste tutar ve çağıranın verdiği bağlam için izin sonucunu üretir.
Domain modeli
Product, permission kayıtlarını, rolleri, scope type kayıtlarını ve isteğe bağlı policy set kayıtlarını bir araya getirir. Bir Permission, ürün içindeki code, resource ve action alanlarıyla tanımlanır. Principal kayıtları user, service, api_key veya external türünde bir dış kimlik taşır.
Bir Role, RolePermission kayıtları üzerinden permission'lara bağlanır. PrincipalRoleAssignment, bir principal ile rolü eşler; atama için geçerlilik başlangıç ve bitiş zamanları tanımlanabilir. Atama isteğe bağlı olarak bir ScopeInstance'a bağlanabilir.
Scope ve client bağlamı
ScopeType, ürün içinde kod, ad ve isteğe bağlı şema verisiyle tanımlanır. ScopeInstance, bir scope type'a ve client mirror kaydına bağlı external_ref değeri taşır. Bir check isteğinde scope anahtarı verildiğinde değerlendirme, eşleşen scope instance atamasını veya scope instance'ı olmayan genel atamayı arar. Scope anahtarı yoksa yalnız genel atamalar değerlendirilir.
Principal, scope instance, principal-role assignment ve policy set kayıtları client mirror ile ilişkilidir. Check transaction'ı istek bağlamındaki ClientId ile ilgili mirror kaydını yükler; principal ve scope instance sorgularını bu bağlamla sınırlar, assignment sorgusunda da bu client'a ait ya da client'ı olmayan atamaları dikkate alır. Bu, kaynakta görülen sorgu davranışıdır; profil bunun ötesinde bir tenant izolasyonu garantisi iddia etmez.
Değerlendirme akışı
| Aşama | Kaynaktaki davranış |
|---|---|
| Bağlam | Transaction, client mirror bağlamını ClientId üzerinden yükler. |
| Kimlik | Principal, türü ve external ID'si ile client bağlamında bulunur. |
| Permission | Product code ve permission code ile ilgili permission kaydı çözülür. |
| Atama | Geçerlilik zamanı dolmamış, silinmemiş; ilgili principal, ürün ve permission ile eşleşen role assignment aranır. |
| Scope | İstek scope'u varsa eşleşen scope instance veya genel atama; yoksa yalnız genel atama değerlendirilir. |
| Karar | Eşleşme bulunursa allow, bulunmazsa deny sonucu; eşleşmede rol, scope ve assignment bilgisi döner. |
CheckBulk birden fazla check isteğini sırayla değerlendirir. CheckChain, verilen scope zincirindeki ilk izinli sonucu döndürür. Ayrı bir role check transaction'ı da gerekli rol kodlarıyla aynı principal, ürün ve scope bağlamında eşleşme arar.
Proje durumu
Repository'de servis giriş noktası, veri modeli, repository sorguları ve yönetim ile policy transaction kayıtları birlikte bulunuyor. Policy department'ında check, bulk check, chain check ve role check transaction'ları kayıtlı; yönetim department'ları domain kayıtlarının yönetim yüzeylerini içeriyor. Bu nedenle profil aktif statüsündedir. Bu değerlendirme, üretim kullanımı, güvenlik seviyesi veya belirli bir erişim kontrolü garantisi anlamına gelmez.