2008-10-26 26 views
10

MVC hesap denetleyicisine bakıyorum ve ASP.NET web formları gibi görünüyor. Nasıl kullanılacağı hakkında iyi bir arka plan bilgisi var mı?ASP.NET MVC Hesap Denetleyicisi kullanım yönergeleri?

Bir kullanıcı veritabanı tablosuna eşleyebilir misiniz, yoksa kendi kullanıcı yönetiminizi yuvarlamak daha iyi midir?

Oturum açmış bir kullanıcının görüntüleyebileceği sayfaları kısıtlamak için MVC'de nasıl kullanıyorsunuz? Bunların hepsini kendiniz mi atmanız gerekiyor?

Web'de hangi kaynaklar ASP.NET Üyeliğini anlamada yardımcı olabilir?

cevap

18

MVC hesabına kontrolör bakıyorum .... o asp.net dan gibi görünüyor?

Scott Guthrie, blog girişinde ASP.NET MVC Preview 4 hakkında bu durumu oldukça iyi açıklıyor. Temel olarak, MVC örneğindeki Hesap Denetleyicisinin ASP.NET üyelik sağlayıcısını kullandığını, dolayısıyla bunlardan herhangi birini kullanabileceğini söylüyor. (İnternette ASP.NET üyelik sağlayıcıları hakkında daha fazla bilgi edinebileceğinizi düşünüyorum.) Bunlardan birini uygulamak/kullanmak istemiyorsanız, uygulamayı kendi kullanıcı yönetiminizi kullanacak şekilde değiştirmek, muhtemelen en iyi seçenek olacaktır.

Nasıl bir kullanıcı oturum görüntüleyebilir hangi sayfaları kısıtlamak Eğer için MVC içinde kullanılmasına yapabilirim? Tüm 'u kendi başınıza döndürmek zorunda mısınız?

Authorize özniteliğini denetleyici sınıfına veya eylem yöntemine ekleyebilirsiniz. (Yukarıdakiyle aynı source.)

// Only logged in users can access this controller. 
[Authorize] 
public class SomeController : Controller 
{ 
    #region Not really important for this example. :] 
    // Maybe rather use a BLL service here instead of the repository from the DAL, but this example is already more verbose than required. 
    private IStuffRepository stuffRepository; 

    public SomeController(IStuffRepository stuffRepository) 
    { 
     if (null == stuffRepository) 
     { 
      throw new ArgumentNullException("stuffRepository"); 
     } 

     this.stuffRepository = stuffRepository; 
    } 
    #endregion 

    // The authorize attribute is inherited - only logged in users can use the index action. 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    // Moderators can flag stuff. 
    [Authorize(Roles="Moderator")] 
    public ActionResult Flag(int id) 
    { 
     this.stuffRepository.Flag(id); 
     return RedirectToAction("Index"); 
    } 

    // Admins ans SysOps can delete stuff. 
    [Authorize(Roles="Admin,SysOp")] 
    public ActionResult Delete(int id) 
    { 
     this.stuffRepository.Delete(id); 
     return RedirectToAction("Index"); 
    } 

    // Only joed can change the objects stuff. ;) 
    // (This is probably bullshit, of course, but I could not make any better example. I blame the fact it is late at night. :)) 
    [Authorize(Users="COMPANY\\joed")] 
    public ActionResult ChangeId(int oldId, int newId) 
    { 
     this.stuffRepository.ChangeId(oldId, newId); 
     return RedirectToAction("Index"); 
    } 
} 
+0

güzel örnek, DI ve harika yorumlar! +1 – Matt