Пользовательская авторизация с MVC2, похоже, имеет проблемы с IsInRole () - PullRequest
0 голосов
/ 29 июня 2010

В моем AccountController у меня есть такой код:

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

Когда я делаю это в отладчике, я вижу, что ControllerContext.HttpContext.User.IsInRole ("Admin") имеет значение true.

Далее у меня есть 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") является ложным б) (принципал As MyAppUserPrincipal) равен нулю

Я что-то здесь не так делаю? (используя MVC2)

Ответы [ 2 ]

0 голосов
/ 30 июня 2010

спасибо за ответ, но правда оказалась в том, что было два отдельных запроса: вход в систему для установки файлов cookie, но перенаправление после входа в систему (что вызвало срабатывание атрибута Authorize) было отдельным запросом,Как и в любом приложении ASP.NET, местом для размещения вашего пользовательского пользователя в контексте по-прежнему является Application_BeginRequest в global.asax.Я думаю, что моя неуверенность в моем уровне навыков MVC ослепляла меня к тому, что я уже знал, как сделать.Приносим извинения за доставленные неудобства - надеюсь, этот ответ поможет.

0 голосов
/ 29 июня 2010

Я также новичок в MVC2, но подумал, что смогу скинуться. Может быть, потому, что вы не выполняете фактическую авторизацию в методе AuthorizeCore(HttpContextBase httpContext)?

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return httpContext.User.IsInRole("Admin");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...