lilydocs
HTTP APIWebSocketConsumer
Pipeline2 dk okuma

Guard ve authorization

Doğrulanmış kimliğin mesajı çalıştırma yetkisini global, controller veya action düzeyinde denetleyin.

Guard, mesaj action'ının çalışmasına izin verilip verilmediğini belirler. Identity middleware credential'ı doğrular; guard bu doğrulanmış Principal'ın scope, rol veya nesne yetkisini kontrol eder.

Scope kontrolü#

Tam middleware örneğindeki ChatWriteGuard, chat:write scope'unu arar. Callback'in güncel imzası cancellation parametresini de içerir:

WsGuard implementation parçası
async fn can_activate(
    &self,
    exchange: &mut WsMessageExchange,
    _: ExecutionCancellation,
) -> Result<(), WebSocketGuardRejection> {
    if exchange.principal().is_some_and(|p| p.has_scope("chat:write")) {
        Ok(())
    } else {
        Err(WebSocketGuardRejection::error(
            WebSocketErrorCode::new("CHAT_FORBIDDEN").expect("sabit kod"),
            "Bu işlem için yetkiniz yok.",
        ).expect("sabit mesaj"))
    }
}

Constructor ve import'lar bağlantıdaki dosyadadır. Bu guard token doğrulamaz; identity middleware ile yayımlanmış Principal'ı kullanır. Domain nesnesi için ayrıca sahiplik/tenant kontrolü gerekiyorsa ilgili servis kararını ekleyin.

Enforcement seviyesini seçin#

Kayıt Kapsam
.guard::<ChatWriteGuard>() Uygulamanın bütün mesaj planları
Controller'da #[guard(ChatWriteGuard)] O controller'ın action'ları
Action'da #[guard(ChatWriteGuard)] Yalnızca ilgili action

WebSocket builder'daki global guard doğrudan enforcement kurar. HTTP guard kayıt davranışını buraya taşımayın. Global → controller → action sırası uygulanır. Aynı effective planda concrete tip tekrarı build hatasıdır; farklı bağımsız route'lar aynı guard tipini paylaşabilir.

Karar biçimleri#

WebSocketGuardRejection::error(code, message) mesajı reddeder. ack(code, message) ilişkili güvenli hata ACK'i ister; gelen ACK yetkisi yoksa yeni ID üretilmez. close(...) bağlantıyı sonlandıran seçimdir. ACK rejection arbitrary business payload taşımaz.

101 sonrası HTTP 403/429 cevabı üretilemez. İstemcinin uygulama hatasını nasıl ele alacağını outcome sözleşmesinde belirleyin. Rate limiter bu guard mekanizmasını kullanır.

Servisler ve süre#

exchange.service::<T>().await aktif mesaj scope'undan resolve eder. Guard ve action aynı Scoped servisi kullanabilir. Yetki kontrolü dış store çağırıyorsa cancellation ve kalan deadline'ı dikkate alın; yeni tam mesaj timeout'u başlatmayın.

Guard planında duplicate kontrolü vardır. Middleware'e uygulanan 64 öğelik sayısal sınırı guard için dokümante etmiyoruz; mevcut kaynak bu sınırı guard planında uygulamaz. Mesaj yaşam döngüsü guard'ın payload extraction'dan önceki yerini gösterir.

Bu sayfanın kaynakları v0.1.0

Anlatım, incelenen framework commit’ine dayanır.

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod