2011-05-18 34 views
15

ASP.NET MVC2 uygulamasında windows kimlik doğrulamasını uygulamaya çalışıyorum. Ben resmi belgeler ile önerilen tüm adımları takip ettim: Ben NTLM Kimlik belirttiğinizÖzel rollerle birlikte ASP.NET MVC ve Windows Kimlik Doğrulaması

<authentication mode="Windows" /> 

<authorization> 
    <deny users="?" /> 
</authorization> 

. Çok uzak çok iyi. Her şey iyi çalışıyor. Veritabanıma karşı giriş yapan kullanıcıları kontrol etmek istiyorum. Masamdaki rolleri almak ve ardından özel bir öznitelik kullanarak yetkilendirmeyi yönetmek istiyorum.
Üyelik ve rol sağlayıcıyı kullanmak istemiyorum. Tablolar kullanıcıları/Rolleri yerinde kullanıyorum, çünkü bir İnternet Uygulaması için kullanıldılar (bu Intranet Uygulamasıdır).

Internet Uygulamamda, kullanıcının verileri girdiği bir form vardı. Form, her şeyi kontrol eden ve giriş yapmış kullanıcının kullanıcı (ve rolleri) ile bir çerez oluşturan bir denetleyiciye gönderilir.

global.asax sayfamda, çerezi okuduğum ve yetkilendirmeleri kontrol etmek için uygulamanın tümünde kullandım özel bir ana site oluşturduğum AuthenticateRequest olayını kapattım.

Bunu Windows Kimlik Doğrulaması ile nasıl uygulayabilirim?

cevap

23

Sadece yeni bir ilke oluşturun ve kullanıcıya atayın ve Global.asax içinde iş parçacığı ekleyin (veya bir eylem filtresi kullanın).

protected void Application_AuthenticateRequest(object sender, EventArgs args) 
{ 
    if(HttpContext.Current != null) 
    { 
    String [] roles = GetRolesFromSomeDataTable(HttpContext.Current.User.Identity.Name); 

    GenericPrincipal principal = new GenericPrincipal(HttpContext.Current.User.Identity, roles); 

    Thread.CurrentPrincipal = HttpContext.Current.User = principal; 
    } 
} 

kullanıcı eşleşen herhangi role sahip değilse, bunlar web.config authoirzation öğesi kullanılarak app men edilebilir:

<authorization> 
    <allow roles="blah,whatever"/> 
    <deny users="*"/>    
</authorization> 
+0

@Xhalent: Evet, ama ... nerede ...? – LeftyX

+0

Umarız bunu açıklığa kavuşturdum – Xhalent

+0

@Xhalent: Yardımlarınız için teşekkürler. Şimdi açık görünüyor. Bir kullanıcı tüm uygulamalara erişme yetkisine sahip değilse (veritabanında değil) ne yapardınız? – LeftyX

6

Hemen yukarıdaki cevabı, Hope eklemek Bu bazı fokları bir süre saklar.

VS 2015 üst çizgi HttpContext.Current.User ile güncellendi kadar kod benim için işe yaramadı

ile intranet MVC 5 site var. Site, kullanıcı zaten Veritabanı'nda oluşturulmamışsa, HttpContext.Current.User öğesine null referansı veriyordu. İlk satırına .User ekleyerek, ilk yükte bu kodu atladı ve çalıştı.

if (HttpContext.Current.User != null) 
     { 


      String[] roles = GetRolesFromSomeDataTable(HttpContext.Current.User.Identity.Name); 

      GenericPrincipal principal = new GenericPrincipal(HttpContext.Current.User.Identity, roles); 

      Thread.CurrentPrincipal = HttpContext.Current.User = principal; 
     } 
İlgili konular