2010-12-09 25 views
6

Hangi kullanıcıların bir siteyi görüntüleyebildiğini denetleyen özel bir HttpModule oluşturmaya çalışıyorum.Özel Kimlik Doğrulama için bir HttpModule, Windows Kimlik Doğrulaması ile nasıl etkileşimde bulunur?

Bunu yapmak için Windows Kimlik Doğrulama'dan yararlanmaya çalışıyorum.

if (HttpContext.Current.User.Identity.Name.Contains("jsmith")) 
{ 
    Response.Write("You do not have the correct permissions to view this site."); 
    Response.End(); 
} 

Ama uygulama düzeyinde bu daha yapılandırılabilir yapmak istiyorum çünkü ben HttpModule'ü kullanmak istiyorum: Tek bir sayfada

, muhtemelen böyle bir şey yapmak istiyorum.

using System; 
using System.Web; 

public class CustomAuthHttpModule : IHttpModule 
{ 
    public void Dispose() { } 

    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += new EventHandler(OnBeginRequest); 
     context.EndRequest += new EventHandler(OnEndRequest); 
    } 

    void OnBeginRequest(object sender, EventArgs e) { } 

    void OnEndRequest(object sender, EventArgs e) 
    { 
     HttpApplication appObject = (HttpApplication)sender; 
     HttpContext contextObject = appObject.Context; 

     if (contextObject.User.Identity.Name.Contains("jsmith")) 
     { 
      contextObject.Response.Clear(); 
      contextObject.Response.End(); 
     } 
    } 
} 

ben OnBeginRequest() fonksiyonunda koyabilirsiniz, ben var kodu kullanarak ile iyi olurdu: Burada

kod üzerinde yapmış başlangıçtır. Ancak, User özelliği, OnEndRequest() işlevi çalışana kadar HttpContext nesnesinde oluşturulmaz.

Kodun daha önceden çalıştırılması, uygulamanın bu çıktının üretilmesiyle ilgili fazladan iş yapmasını engelleyecektir, çünkü bazı kullanıcılar yalnızca son erişimden engellenecektir.

Birisi buna bir çözüm önerebilir - bunun nedeni, modülümün Windows Auth modülünden önce çalıştığı, ya da ne?

... Ya da IIS veya dosya sistemi izinleri ile yapmaya çalıştığım şeyi yapmak için daha kolay bir yol var mı?

+2

IIS bunu sizin için izin sadece Yüklü bir nedeni var mı? Veya web.config sayfanızdaki 'yetkilendirme 'özelliklerini kullanın? – CodingGorilla

+0

Ne demek istediğini açıklayabilir misin? Orada ne hakkında konuştuğunuzu görmek için özelliklerine bakacağım. IIS bunu benim için nasıl yapar? – vwfreak

+0

''! Muhteşem. Bu bir cevap olup olmamışsa, bunu bir cevap olarak işaretlerdim. Teşekkürler! – vwfreak

cevap

0

Yöntemi global.aspx'te uygulamaya çalıştınız mı? OnSessionStart? Ayrıca içerme ve kullanıcı adı yerine hasRole veya başka bir grup-Property kullanacağım.

+0

Global.asax dosyasını kullanabileceğinizi anlıyorum. Belki bu daha iyi bir çözümdür, fakat HttpModules'in nasıl çalıştığını anlamaya çalışıyordum. Ne zaman bir HttpModule kullanırdınız? – vwfreak

+0

Kullanıcı adı hakkında ne söylediğini anladım. Bu mantıklı. – vwfreak

+0

Giriş için değil, erişim hakları için. Bu noktada seni yanlış anladım. Veya kayıt için. HttpModules daha çok filtreler gibidir. – Christian