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