2012-11-15 13 views
8

ASP.NET MVC 4 uygulamamda, Windows kimlik doğrulaması uygulamak için intranet şablonunu kullanıyorum. Ayrıca Akıcı Güvenlik kullanıyorum.ASP.NET MVC 4'te Etki Alanı Gruplarını Akıcı Güvenlikli Roller Olarak Nasıl Kullanabilirim?

Kutudan çıkıp, denetleyici yöntemlerine erişimi belirli etki alanı gruplarına veya etki alanı kullanıcılarına sınırlamak için aşağıda gösterilen ek açıklamaları kullanabilirim.

[Authorize([email protected]"Domain\GroupName")] 
public ActionResult Index() 
{ 
    ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application."; 

    return View(); 
} 

[Authorize([email protected]"Domain\UserName")] 
public ActionResult About() 
{ 
    ViewBag.Message = "Your app description page."; 

    return View(); 
} 

Bu iki yöntemi, Fluent Security'yi kullanarak aynı etki alanı grubuna ve etki alanı kullanıcısına nasıl sınırlardım? Eğer daha kolaysa gruptan daha çok ilgileniyorum. Özel bir politika oluşturmam gerekiyor mu? Eğer öyleyse, kimliği doğrulanmış kullanıcının bir etki alanı grubunun Akıcı Güvenlik için uygun rolü kullanması için geri dönüp görmediğini nasıl kontrol edeceğimden emin değilim?

Başlarken FluentSecurity'i kullanmaya başladım, bu yüzden FluentSecurity'nin nasıl uygulanacağının temellerini biliyorum, yalnızca Domain Gruplarını rol olarak nasıl kullanacağımı bilmiyorum.

Teşekkürler!

cevap

3

Rol için alan gruplarını kullanmanın bir yolunu bulmuş olabilirim. Genişletilmiş örneği Akıcı Güvenlik Başlarken sayfasından ayarlıyorum. Global.asax.cs yılında

: Web.config içinde

SecurityConfigurator.Configure(configuration => 
{ 
    // Let Fluent Security know how to get the authentication status of the current user 
    configuration.GetAuthenticationStatusFrom(() => HttpContext.Current.User.Identity.IsAuthenticated); 

    // Let Fluent Security know how to get the roles for the current user 
    configuration.GetRolesFrom(System.Web.Security.Roles.GetRolesForUser); 

    // This is where you set up the policies you want Fluent Security to enforce 
    configuration.For<HomeController>().Ignore(); 

    configuration.For<AccountController>().DenyAuthenticatedAccess(); 
    configuration.For<AccountController>(x => x.ChangePassword()).DenyAnonymousAccess(); 
    configuration.For<AccountController>(x => x.LogOff()).DenyAnonymousAccess(); 

    configuration.For<BlogController>(x => x.Index()).Ignore(); 
    configuration.For<BlogController>(x => x.AddPost()).RequireRole(@"Domain\Writers"); 
    configuration.For<BlogController>(x => x.AddComment()).DenyAnonymousAccess(); 
    configuration.For<BlogController>(x => x.DeleteComments()).RequireRole(@"Domain\Writers"); 
    configuration.For<BlogController>(x => x.PublishPosts()).RequireRole(@"Domain\Owners"); 

    // To authorize the Home Controller Index Action as in my original question 
    configuration.For<HomeController>(c => c.Index()).RequireRole(@"Domain\GroupName"); 
}); 

GlobalFilters.Filters.Add(new HandleSecurityAttribute(), 0); 

:

<authentication mode="Windows" /> 
<authorization> 
    <deny users="?" /> 
</authorization> 
<roleManager defaultProvider="WindowsProvider" 
     enabled="true" 
     cacheRolesInCookie="false"> 
    <providers> 
    <add 
     name="WindowsProvider" 
     type="System.Web.Security.WindowsTokenRoleProvider" /> 
    </providers> 
</roleManager> 

Ben tek bir kullanıcı yetkilendirme bir yol bulmuş değil, ama hepimiz bunun çoğunlukla biliyorum Zaten grupları kullanmak için en iyi uygulama.

Bunu yapmanın daha iyi yolları var mı?