ASP.NET MVC - установить пользовательский IIdentity или IPrincipal
Мне нужно сделать что-то довольно простое: в моем приложении ASP.NET MVC я хочу установить пользовательский IIdentity / IPrincipal. Что проще / больше подходит. Я хочу расширить значение по умолчанию, чтобы я мог вызвать что-то вродеUser.Identity.Id
а такжеUser.Identity.Role
, Ничего особенного, только некоторые дополнительные свойства.
Я прочитал тонны статей и вопросов, но чувствую, что усложняю, чем на самом деле. Я думал, что это будет легко. Если пользователь входит в систему, я хочу установить свой IIdentity. Вот я и подумал, буду реализовыватьApplication_PostAuthenticateRequest
в моем global.asax. Однако это вызывается при каждом запросе, и я не хочу выполнять вызов базы данных при каждом запросе, который запрашивал бы все данные из базы данных и помещал бы в пользовательский объект IPrincipal. Это также кажется очень ненужным, медленным и не в том месте (делая там вызовы из базы данных), но я могу ошибаться. Или откуда еще эти данные?
Поэтому я подумал, что всякий раз, когда пользователь входит в систему, я могу добавить в сеанс некоторые необходимые переменные, которые я добавляю в пользовательский IIdentity вApplication_PostAuthenticateRequest
обработчик события. Тем не менее, мойContext.Session
являетсяnull
там, так что это тоже не путь.
Я работаю над этим уже целый день и чувствую, что что-то упустил. Это не должно быть слишком сложно, верно? Я также немного смущен всеми (полу) связанными вещами, которые идут с этим.MembershipProvider
, MembershipUser
, RoleProvider
, ProfileProvider
, IPrincipal
, IIdentity
, FormsAuthentication
.... Я единственный, кто находит все это очень запутанным?
Если бы кто-то мог сказать мне простое, элегантное и эффективное решение для хранения некоторых дополнительных данных на IIdentity без всего лишнего запаха ... это было бы здорово! Я знаю, что есть аналогичные вопросы по SO, но если ответ на этот вопрос мне нужен, я должен пропустить.