2013-02-23 6 views
8

Ich möchte Controller-Aktion sichern, so dass nur Benutzer mit der Rolle "Admin" können. Ich benutze nicht Role/Membership-Provider bei allem ist benutzerdefiniert.
Ich habe dies bisher:Wie 'Pass-Parameter' zu benutzerdefinierten AuthorizeAttribute hinzufügen

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"); 
    } 
} 

Beachten Sie, dass ich "Admin" hier fest einprogrammiert.
Ich möchte, dass dies dynamisch sein. Jetzt
Diese Arbeit:

[CustomAuthorize] 
     public ActionResult RestrictedArea()... 

Aber ich möchte etwas wie folgt aus:

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

Antwort

19

AuthorizeAttribute bereits Roles Eigenschaft, die für diesen Zweck verwendet werden können:

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

Ich erhalte ' this.Roles-Wert als 'null' –

+1

Haben Sie den Wert an 'Roles'-Variable übergeben? [CustomAuthorize (Roles =" admin ")]'? – Zbigniew

+0

ja Alles ist gleich –

Verwandte Themen