2012-12-13 38 views
5

我正在嘗試創建自己的[Authorize]屬性,以便我可以使用自己的授權邏輯來創建分層角色。MVC4授權屬性覆蓋;如何讓角色通過?

如果有人在控制器或動作上做[Authorize(Roles = "Admin")] 如何在我的AuthorizeCore函數中獲得字符串「Admin」?

我使用這個代碼:

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

回答

8

它退出你已經面臨着一個共同的東西。

這一建議在後期應MVC4工作,因爲它在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

謝謝你,我的印象是,角色是的角色當前登錄的用戶,並沒有想到它會有什麼用'[傳遞授權(「管理員」)]' – Kyle

+0

@ user1308743,沒問題,投票的答案也是好事,不要忘記;) –

+0

我只是等待時間限制通過,以標記爲答案和投票=) – Kyle

1

角色是公共財產。你應該能夠做到這一點:

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

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

     return false; 
    } 
} 

或者什麼,那就是你需要做的

0

如果你需要得到允許的角色列表,你可以簡單地獲得角色屬性。它將列出在屬性修飾中指定的字符串。

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

你可以看到這對AuthorizeAttribute definition