Skip to main content

Zincir

Her Command/Query, Handler’a ulaşmadan önce bir IPipelineBehavior zincirinden geçer. Zincir, MediatR’da kayıt sırasıyla çalışır. DependencyInjection.cs:
Etkin sıra: Exception → Authorization → Validation → Permission → Handler
LoggingPipelineBehavior kayıtlı ama yorum satırına alınmıştır (disabled). Etkinleştirmek için ilgili satırın yorumunu kaldırmak yeterlidir; sıradaki konumu (Authorization’dan sonra) korunur.

1. ExceptionPipelineBehavior

En dış halka. Bilinen exception’ları olduğu gibi yukarı geçirir (throw;), bilinmeyenleri UndefinedApplicationException’a sarar. IBusMessage (Hangfire/bus mesajları) sarılmaz — DLQ/retry kararı altyapıya bırakılır.
Bilinen exception’lar API’deki ProblemDetails katmanına ulaşır ve doğru HTTP koduna çevrilir: DomainException → 400, ValidationException → 422, Sms/EmailServiceException → 503. Yani ForbiddenException (bir DomainException alt sınıfı) bilinen sayılır ve sarılmadan geçer.

2. AuthorizationPipelineBehavior

RBAC ve multi-tenant erişim kontrolü. Yalnızca IRequirePermissions veya IRequireTenantAccess uygulayan request’lerde devreye girer; aksi halde doğrudan next() çağrılır. Kullanıcı bağlamını ICurrentUserService (BuildingBlocks.Keycloak) üzerinden okur.
Başarısız her durumda ForbiddenException fırlatılır; bu da HTTP 403’e dönüşür.

3. ValidationPipelineBehavior

İlgili request için kayıtlı tüm IValidator<TRequest>’ları paralel çalıştırır. IBusMessage’ı atlar ve hiç validator yoksa devam eder. Hata varsa tek bir ValidationException (tüm failures ile) fırlatılır.
ValidationException API tarafında HTTP 422 + alan bazlı errors listesine çevrilir. Validator’ların nasıl yazıldığı için bkz. Validation & Mapping.

4. PermissionPipelineBehavior

IRequirePermission (tekil) uygulayan request’lerde JWT permissions claim’ini doğrudan IHttpContextAccessor üzerinden okur. Bu, API’deki [RequirePermission] attribute’una ek bir defense-in-depth katmanıdır — özellikle Hangfire job’larından veya event handler’lardan tetiklenen command’lerde değerlidir.
AuthorizationPipelineBehavior (IRequirePermissions, çoğul) ile PermissionPipelineBehavior (IRequirePermission, tekil) iki ayrı marker’dır. İlki ICurrentUserService soyutlamasını ve ForbiddenException (403) üretir; ikincisi ham HttpContext claim’lerini okur ve DomainException (400) fırlatır. Çoğu admin command’i IRequirePermissions’ı tercih eder.

Sonraki adımlar

Authorization marker'ları

IRequirePermissions, IRequireTenantAccess, IRequirePermission detayları.

Validation & Mapping

FluentValidation custom kuralları ve AutoMapper.

Command / Query deseni

Behavior’lardan geçen gerçek handler örnekleri.

Güvenlik

Çift JWT, RBAC ve token doğrulama mimarisi.