MVC3

2011-12-20 27 views
8

için yetkilendirme özniteliği nasıl kullanılır MVC'de [Authorize] özniteliğini kullanmak için bunu okudum, bunu yalnızca bir eylemin üzerine veya güvenliğini sağlamak istediğiniz denetleyici sınıfının üzerine yerleştirmelisiniz.MVC3

Soruma sorum: Authorize özniteliği, bir kullanıcının oturum açıp açmadığını nasıl bilir? Bir kullanıcı yetkilendirilmişse Authorize bildirmek için herhangi bir Session nesnesi vermek zorunda mıyım?

cevap

15

Bu özellik, HttpContext.User.Identity.IsAuthenticated numaralı telefonu görüntüleyerek çalışır.

FormsAuthentication gibi bir şey kullanıyorsanız, kullanıcının makinasında geçerli bir FormsAuthentication tanımlama bilgisi varsa (bu FormsAuthentication.SetAuthCookie kullanarak ekleyebileceğiniz), bu doğru olarak ayarlanır. Eğer Authorize iç işleyişi ilgileniyorsanız

, bu yayımlanmış Microsoft kaynak kodundan geçerli: Burada

protected virtual bool AuthorizeCore(HttpContextBase httpContext) { 
     if (httpContext == null) { 
      throw new ArgumentNullException("httpContext"); 
     } 

     IPrincipal user = httpContext.User; 
     if (!user.Identity.IsAuthenticated) { 
      return false; 
     } 

     if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase)) { 
      return false; 
     } 

     if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole)) { 
      return false; 
     } 

     return true; 
    } 

some more info on FormsAuthentication olduğunu.

+0

Çok teşekkürler. Büyük kaynak! – Jose3d

2

Yetkilendirme özniteliği, varsayılan olarak httpcontext'i argüman olarak alır. çağrıldığında Daha sonra HttpContext.User.Identity.IsAuthenticated bool değerini denetler ve buna göre davranır. Bu, yalnızca Form kimlik doğrulaması kullanıyorsanız çalışır. Kendi oturum açma mantığınızı (örneğin oturum nesnesinde) kullanıyorsanız, Yetkilendirme Özniteliği'nden bir sınıf çıkartabilirsiniz ve bunu çağırabilirsiniz.

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true,  AllowMultiple = true)] 
public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     clsSession sess = httpContext.Session["Current"] as clsSession; 
     if (sess.IsLogin) return true; 
     return false; 
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     filterContext.Result = new ViewResult { ViewName = "Unauthorized" }; 
    } 
} 

Sonra böyle bu sınıfı kullanabilirsiniz: Bu çalışacaktır

[MyAuthorize] 
public ActionResult Index() 
{ 
    return View(); 
} 

. Tüm denetleyici işlemlerinde [Yetkilendir] yerine [Yetkilendir] seçeneğini kullanabilirsiniz. Yanlış döndürürse, bir görünüm döndürür (Bu durumda "Yetkisiz"). Görünüm adı herhangi bir şey olabilir ve görünümler/paylaşımlı klasörde bulunabilir.