2013-02-23 16 views
8

Voglio proteggere l'azione del controller in modo che solo gli utenti con il ruolo "Admin" possano entrare.
Non uso affatto il provider di ruolo/appartenenza.
Ho fatto questo finora:Come aggiungere "pass parameter" a custom 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"); 
    } 
} 

Si noti che ho hardcoded "Admin" qui.
Voglio che questo sia dinamico.
Questo lavoro ora:

[CustomAuthorize] 
     public ActionResult RestrictedArea()... 

Ma io voglio qualcosa di simile:

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

risposta

19

AuthorizeAttribute ha già Roles proprietà che può essere utilizzato per questo scopo:

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

sto ottenendo ' valore.Roles' come 'null' –

+1

Hai passato il valore alla variabile' Roles' '[CustomAuthorize (Roles =" admin ")]'? – Zbigniew

+0

sì Tutto è lo stesso –