Skip to main content

Genel bakış

Application katmanı yetkilendirmeyi marker arayüzleriyle taşır. Bir Command/Query yalnızca bir işaretleyici arayüz uygular; gerçek kontrolü pipeline behavior’lar yapar (bkz. Pipeline Behaviors). Bu sayede yetki niyeti use-case’in kendi tipinde, deklaratif biçimde durur.

IRequirePermissions

Birden fazla izin gerektiren command/query’ler için. Tüm izinler AND mantığıyla karşılanmalıdır.
Kullanım — command bir izin dizisi bildirir:
AuthorizationPipelineBehavior eksik izinleri toplar ve hepsini içeren bir ForbiddenException fırlatır:

IRequireTenantAccess

Çok-kiracılı (multi-tenant) izolasyon için. Kullanıcının token’ındaki tenant ile request’teki tenant örtüşmeli; aksi halde başka bir organizasyonun kaynağına erişim engellenir.
Kullanım — route/body’den gelen organizasyon ID’si:
Behavior kontrolü:
Bir request hem IRequirePermissions hem IRequireTenantAccess uygulayabilir. AuthorizationPipelineBehavior önce kimlik doğrulamayı, sonra izinleri (AND), en son tenant örtüşmesini kontrol eder.

IRequirePermission

Tekil izin gerektiren, JWT permissions claim’ini doğrudan okuyan daha hafif marker. PermissionPipelineBehavior HttpContext üzerinden kontrol eder ve "*:*" wildcard’ını süper yetki olarak kabul eder.
IRequirePermission (tekil) ile IRequirePermissions (çoğul) karıştırılmamalıdır. Çoğul olan ICurrentUserService soyutlaması üzerinden çalışır ve 403 üretir; tekil olan ham HttpContext claim’lerini okur ve 400 (DomainException) üretir. Yeni admin use-case’lerinde çoğul IRequirePermissions tercih edilir.

ForbiddenException

Yetki reddi için tek exception tipi. Bir DomainException alt sınıfıdır; bu yüzden ExceptionPipelineBehavior tarafından “bilinen exception” sayılır ve sarılmadan ProblemDetails katmanına ulaşır (HTTP 403).

Context soyutlamaları

SeedWork/Security/ altında, mevcut isteğin aktörünü temsil eden arayüzler bulunur. Implementasyonları API katmanında HttpContext claim’lerinden beslenir.
Audit pipeline’ının tek girdisi. Aktörü çözme sırası: user_id claim → citizen_id claim → SystemActor.Id (background job / anonymous). Bu sayede CreatedBy/UpdatedBy/DeletedBy her zaman dolu yazılır.

Katmanlı yetki (defense in depth)

Aynı yetki, iki ayrı katmanda bağımsız doğrulanır:
  • API katmanı — controller’a [RequirePermission] attribute’u ile koyulur; HTTP request’i daha endpoint’e girerken reddeder.
  • Application katmanı — pipeline behavior, command/query’nin marker’ını okur ve handler çalışmadan tekrar doğrular.
Bu çift kontrol özellikle Hangfire job’ları veya event handler’ları gibi HTTP request’i olmadan command tetikleyen yollarda değerlidir: API attribute’u devreye girmez ama application behavior yine korur.
Rol/izin modelinin tam dökümü (RolePermission aggregate, Keycloak permissions multivalued claim, RBAC token invalidation, TokenVersion) için bkz. Güvenlik › Yetkilendirme.

Sonraki adımlar

Güvenlik › Yetkilendirme

Detaylı RBAC, RolePermission ve Keycloak claim dökümü.

Pipeline Behaviors

Authorization ve Permission behavior’larının tam implementasyonu.

Command / Query deseni

Marker arayüzlerinin command/query üzerinde kullanımı.

Keycloak

Çift realm, claim üretimi ve provisioning.