2012-12-13 4 views
5

Ich versuche, mein eigenes [Autorisieren] Attribut zu erstellen, damit ich meine eigene Autorisierungslogik verwenden kann, um hierarchische Rollen zu haben.MVC4 Autorize Attribut overide; wie man in Rollen überholt wird?

Wenn jemand [Authorize(Roles = "Admin")] auf einem Controller oder Aktion tut Wie bekomme ich die Zeichenfolge "Admin" in meiner AuthorizeCore-Funktion?

Ich verwende diesen Code:

public class Authorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     //authorize role logic 
      if (true) 
       return true; 

     return false; 
    } 
    } 

MVC4, .net 4.5, C#, VS 2012

Antwort

8

Es beenden ist eine gemeinsame Sache, die Sie mit konfrontiert.

Diese Empfehlung in der Post sollte in MVC4 arbeiten, wie es in MVC 3 arbeitet: - ASP.NET MVC - Alternative to Role Provider?

protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     bool isAdmin; 
     if(Roles.Contains("Admin")) 
      isAdmin = true; 

     return isAdmin ; 
    } 
+1

Dank sehen können, war ich unter dem Eindruck, dass Rollen war die Rollen des aktuell angemeldeten Benutzers, und nicht glaube, es hätte was mit 'übergeben wurde [ Autorisieren ("Admin")] ' – Kyle

+0

@ user1308743, kein Problem, auch die Antworten stimmen ist gut, nicht zu vergessen;) –

+0

Ich warte nur auf das Zeitlimit zu übergeben, als Antwort und Abstimmung zu markieren =) – Kyle

1

Rollen ist ein öffentliches Eigentum. Sie sollten dies tun können:

public class Authorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 

     if(Roles.Contains("MyRole")) 
      return true; 

     return false; 
    } 
} 

oder was auch immer es ist, dass Sie

0

tun müssen, wenn Sie die Liste der zulässigen Rollen bekommen, dann können Sie einfach die Rollen Eigenschaft erhalten. Es wird die Zeichenfolge angezeigt, die in der Attributdekoration angegeben wurde.

public class Authorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var allowedRoles = Roles; 
    } 
} 

Sie dies auf der AuthorizeAttribute definition