使用MVC2的自定义授权似乎与IsInRole()有问题

时间:2010-06-28 21:26:49

标签: c# asp.net-mvc-2 authorization

在我的AccountController中,我有这样的代码:

ControllerContext.HttpContext.User = new MyAppUserPrincipal(user);

当我在调试器中逐步执行此操作时,我可以看到ControllerContext.HttpContext.User.IsInRole(“Admin”)为真。

接下来,我有一个受自定义属性保护的HomeController:

[AuthorizeMyApp(Roles = "Admin")]

在属性的定义中,我有这个:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var principal = filterContext.HttpContext.User ;
    if (! principal.IsInRole(_roles) )

这是奇怪的,登录并试图回家后:

principal.Identity.Name具有预期名称,IsAuthenticate为true;然而 a)principal.IsInRole(“Admin”)为false b)(Principal As MyAppUserPrincipal)为null

我在这里做错了吗? (使用MVC2)

2 个答案:

答案 0 :(得分:0)

我也是MVC2的新手,但我认为我会参与进来。可能是因为你没有在AuthorizeCore(HttpContextBase httpContext)方法中进行实际授权吗?

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return httpContext.User.IsInRole("Admin");
    }
}

答案 1 :(得分:0)

感谢您的回答,但事实证明,有两个单独的请求正在进行:登录设置cookie,但登录后的重定向(导致授权属性触发)是一个单独的请求。与任何ASP.NET应用程序一样,将自定义用户置于上下文中的位置仍然是global.asax中的Application_BeginRequest。我认为我对MVC技能水平缺乏信心让我对我已经知道的事情感到茫然。很抱歉给任何人带来不便 - 希望这个答案有所帮助。