Как я могу присвоить значение 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 - Как хранить / назначать роли аутентифицированных пользователей, есть больше информации о простом способе делать то, что вы хотите.