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.| Marker | Kontrol eden behavior | Hata | HTTP |
|---|---|---|---|
IRequirePermissions (çoğul) | AuthorizationPipelineBehavior | ForbiddenException | 403 |
IRequireTenantAccess | AuthorizationPipelineBehavior | ForbiddenException | 403 |
IRequirePermission (tekil) | PermissionPipelineBehavior | DomainException | 400 |
IRequirePermissions
Birden fazla izin gerektiren command/query’ler için. Tüm izinler AND mantığıyla karşılanmalıdır.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.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, JWTpermissions claim’ini doğrudan okuyan daha hafif marker. PermissionPipelineBehavior HttpContext üzerinden kontrol eder ve "*:*" wildcard’ını süper yetki olarak kabul eder.
ForbiddenException
Yetki reddi için tek exception tipi. BirDomainException 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.
ICurrentUser — kimliği doğrulanmış kullanıcı
ICurrentUser — kimliği doğrulanmış kullanıcı
ICurrentTenant — aktif tenant bağlamı
ICurrentTenant — aktif tenant bağlamı
ICurrentActor — audit aktörü (asla null değil)
ICurrentActor — audit aktörü (asla null değil)
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.
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.