2012-12-13 23 views
5

Próbuję tworzyć własne [Autoryzuj] Atrybut więc mogę użyć własnego logiki autoryzacji mieć hierarchiczny role.MVC4 Autoryzuj atrybut nadpisany; jak przejść w role?

Jeśli ktoś ma [Authorize(Roles = "Admin")] na kontrolerze lub akcji Jak uzyskać ciąg "Admin" w mojej funkcji AuthorizeCore?

Używam tego kodu:

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

Odpowiedz

8

Jest zakończyć wspólną rzecz, że masz do czynienia z.

To zalecenie w poście powinny działać w MVC4 jak to działa w MVC 3: - ASP.NET MVC - Alternative to Role Provider?

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

     return isAdmin ; 
    } 
+1

Dzięki, jestem pod wrażeniem, że Role były role aktualnie zalogowanego użytkownika, a nie myśleć, że to coś, co zostało przekazane w z '[ autoryzacji („Administrator”)] ' – Kyle

+0

@ user1308743, nie ma problemu, również głosowanie odpowiedź jest dobrą rzeczą, aby nie zapomnieć;) –

+0

właśnie czeka na terminie przekazać, aby oznaczyć jako odpowiedź i głosowania =) – Kyle

1

ról jest własnością publiczną. Powinieneś być w stanie to zrobić:

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

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

     return false; 
    } 
} 

czy cokolwiek to jest, że trzeba zrobić

0

Jeśli trzeba uzyskać listę dozwolonych ról, można po prostu dostać właściwość ról. Wyświetli ciąg znaków określony w dekoracji atrybutu.

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

Można to zobaczyć na AuthorizeAttribute definition