Как я могу присвоить значение HttpContext.User в ASP.NET MVC?

Я пишу контроллер, как показано ниже:

public class AccountController : Controller
{
    public ActionResult Login(/*---*/)
    {
        GenericIdentity identity = new GenericIdentity("userName");
        GenericPrincipal principal = new GenericPrincipal(identity, new string[] { "role1", "role2" });
        this.HttpContext.User = principal;
        /*---*/;
    }
}

После входа в систему я могу получить имя пользователя по User.Identity.Name в другом контроллере. Но User.IsInRole("role1") всегда возвращает false.

Как я могу присвоить значение пользователю, я не хочу использовать членство...

2 ответа

Решение

Гектометр

Используя членство?

По крайней мере, API нижнего уровня. Вы должны назначить ему принципал в каком-то событии (которое в основном превращается в cookie и десериализуется при каждом вызове).

Подробности в http://support.microsoft.com/kb/306590

Или также в http://msdn.microsoft.com/en-us/library/aa302399.aspx

Вам нужно где-то сохранить пользовательские данные, чтобы все последующие запросы страниц имели к ним доступ. Обычно вы создаете билет аутентификации и сохраняете его в куки. Затем для каждого запроса вы извлекаете данные и создаете свой IPrincipal. Это можно сделать в Application_AuthenticateRequest метод Global.ascx,

MVC - Как хранить / назначать роли аутентифицированных пользователей, есть больше информации о простом способе делать то, что вы хотите.

Другие вопросы по тегам