Tüm lablar

Uygulamalı

Next.js yetkilendirme sınırı

Yetkilendirme kontrolünü Server Action’ın içine taşı, yalnızca bağlantıyla ulaşılan sayfaları gerçekten özel içerikten ayır ve farkı arayüze güvenmek yerine doğrudan çağrıyla kanıtla.

Zorluk: OrtaSüre: ~60 dk

Amaç

Gizli bir düğmenin erişim kontrolü olmadığını göster: düşük yetkili kullanıcı olarak action’ı ve rotayı doğrudan çağır ve kararı istemcinin değil sunucunun verdiğini doğrula.

Ön koşullar

  • En az iki role sahip, sahibi olduğun bir Next.js App Router uygulaması.
  • İki oturum: düşük yetkili ve daha yüksek yetkili bir hesap.
  • Her Server Action’ı herkese açık bir uç nokta gibi ele alma isteği.

Ortam

  • Bazı roller için arayüzde gizlenen, veri değiştiren bir Server Action.
  • Yalnızca menüde bağlantı verilen bir sayfa ile gerçekten özel olması gereken bir sayfa.
  • Action isteğini elle gönderebilen ağ sekmesi veya bir HTTP istemcisi.

Adımlar

  1. 1

    Action’ı arayüz olmadan çağır

    Server Action isteğini düşük yetkili oturumdan yeniden oynat. Başarılı olursa arayüzdeki gizleme kozmetiktir; kontrol action’ın içine ait.

  2. 2

    Kontrolü içine taşı

    Yetkilendirme kontrolünü action’ın yaptığı ilk şey olarak, sunucu tarafındaki oturuma karşı, herhangi bir veri erişiminden önce yap. İstemcinin uyduramayacağı bir reddi döndür.

  3. 3

    Yalnızca bağlantıyı özelden ayır

    Yalnızca listelenmeyen bir sayfa için robots noindex yeterlidir; özel olması gereken içerik için middleware/sunucu mantığında HttpOnly oturumla zorla ve doğrudan isteği yeniden test et.

  4. 4

    Her iki rolü yeniden test et

    Doğrudan çağrıları tekrarla. Düşük yetkili oturum isteği elle oluştursa bile sunucuda reddedilmelidir.

Nasıl doğrulanır

  • Action, yalnızca gizlendiğinde değil doğrudan çağrıldığında da düşük yetkili oturumu reddeder.
  • Yetkilendirme kontrolü çalışmadan önce hiçbir ayrıcalıklı veri okunmaz.
  • Özel rota, geçerli sunucu oturumu olmayan bir istek için ret döndürür.

Dayanak yazılar