lilydocs
HTTP APIWebSocketConsumer
İstek işleme2 dk okuma

Guard’lar

Action çalışmadan önce kimlik, yetki veya kota koşullarını kontrol edin.

Guard, bir action’ın çalışmasına izin verilip verilmeyeceğine karar verir. Constructor new(Arc<Extensions>), karar method’u can_activate(&self, &mut Request, ExecutionCancellation) şeklindedir.

Rol kontrolü örneği#

Aşağıdaki guard doğrulanmış principal’da admin rolünü arar. Kimliği doğrulama görevi AuthGuard tarafından önce tamamlanmalıdır.

AdminGuard
use std::sync::Arc;
use lilyrs::http_api::{
    ExecutionCancellation, Extensions, GuardInitError, GuardRejection,
    GuardTrait, HttpErrorCode, Principal, Request,
};

pub struct AdminGuard;

#[lilyrs::http_api::async_trait::async_trait]
impl GuardTrait for AdminGuard {
    async fn new(_: Arc<Extensions>) -> Result<Self, GuardInitError> { Ok(Self) }

    async fn can_activate(&self, request: &mut Request, _: ExecutionCancellation)
        -> Result<(), GuardRejection>
    {
        match request.principal() {
            Some(principal) if principal.has_role("admin") => Ok(()),
            Some(_) => Err(GuardRejection::forbidden(
                HttpErrorCode::new("ADMIN_REQUIRED").unwrap(),
            ).unwrap()),
            None => Err(GuardRejection::unauthorized(
                HttpErrorCode::new("AUTH_REQUIRED").unwrap(), "Bearer",
            ).unwrap()),
        }
    }
}

Action’a bağlama#

Action attribute’ları
#[get("/admin")]
#[guard(AuthGuard, AdminGuard)]

Bu attribute’ları controller action’ına ekleyin. Guard’lar soldan sağa çalışır. Önce AuthGuard principal’ı yayımlar, sonra AdminGuard rolünü kontrol eder.

Instance sağlama#

AppBuilder::guard(instance) belirli bir türün hazır instance’ını verir. Bu çağrı tek başına bütün endpoint’lerde guard çalıştırmaz. İlgili action’da #[guard(Type)] yine gereklidir. Aynı prebuilt tür tekrar verilirse son instance kullanılır; CsrfGuard bu yoldan verilemez.

Ret sözleşmesi#

GuardRejection, ortak HttpRejection yapısını kullanır. 401 challenge, 403, 429 / Retry-After, 503, sınırlandırılmış problem detail ve JSON/text yanıt destekler. Beklenen erişim reddini teknik runtime hatasıyla karıştırmayın.

Bu sayfanın kaynakları v0.1.0

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

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod