【问题标题】:Custom authorization with MVC2 seems to have problem with IsInRole()MVC2 的自定义授权似乎与 IsInRole() 有问题
【发布时间】:2010-06-28 21:26:48
【问题描述】:

在我的 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 为真;然而 a) principal.IsInRole("Admin") 为假 b) (principal As MyAppUserPrincipal) 为空

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

【问题讨论】:

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


    【解决方案1】:

    我也是 MVC2 的新手,但我想我会加入。可能是因为您没有在 AuthorizeCore(HttpContextBase httpContext) 方法中进行实际授权吗?

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-10-26
        • 2016-03-22
        • 1970-01-01
        • 1970-01-01
        • 2012-09-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-01
        • 1970-01-01
        相关资源
        最近更新 更多