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:
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.