Вопрос

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

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.

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

Это было полезно?

Решение

Хм.

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top