2013-02-23 20 views
8

Denetleyici eylemini güvenli hale getirmek istiyorum, böylece yalnızca "Admin" rolüne sahip kullanıcılar girebilir.
Rol/Üyelik sağlayıcısı kullanmıyorum her şey özeldir.
Ben şimdiye kadar bu yaptı: Burada "Yönetici" kodlanmış'Pass parametresi' özel olarak nasıl eklenir AuthorizeAttribute

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var isAuthorized = base.AuthorizeCore(httpContext);    
     if (!isAuthorized) 
      return false; 

     string username = httpContext.User.Identity.Name; 

     UserRepository repo = new UserRepository(); 

     return repo.IsUserInRole(username, "Admin"); 
    } 
} 

Bildirimi.
Bunun dinamik olmasını istiyorum. Şimdi
Bu çalışma:

[CustomAuthorize] 
     public ActionResult RestrictedArea()... 

Ama hiç böyle bir şey istiyorum:

[CustomAuthorize(Roles = "Admin")] 
     public ActionResult RestrictedArea() 

cevap

19

AuthorizeAttribute zaten bu amaç için kullanılabilir Roles özelliği vardır:

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var isAuthorized = base.AuthorizeCore(httpContext);    
     if (!isAuthorized) 
     { 
      return false; 
     } 

     string username = httpContext.User.Identity.Name; 

     UserRepository repo = new UserRepository(); 

     return repo.IsUserInRole(username, this.Roles); 
    } 
} 
+0

alıyorum ' this.Roles' değeri "null" olarak –

+1

"Roles' değişkeni" [CustomAuthorize (Roles = "admin")] 'değerine mi değer verdiniz?'? – Zbigniew

+0

yes Herşey aynı –

İlgili konular