2012-12-13 37 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