Получать пользовательские данные по каждому запросу - PullRequest
3 голосов
/ 18 июля 2009

Моя проблема довольно проста - я думаю. Я делаю проект ASP.NET MVC. Это проект, который требует постоянного входа пользователя в систему. Мне, вероятно, нужна информация о текущем пользователе в MasterPage, вот так; «Привет, Марк, ты вошел!».

Но что, если мне нужна та же информация в представлении? Или какая-то проверка в моем слое?

Так как же убедиться, что эта информация доступна, когда она мне нужна, и где она мне нужна?

Ответы [ 6 ]

2 голосов
/ 18 июля 2009

Сколько пользовательской информации вам нужно? Вы всегда можете получить доступ к Thread.Current.Principal и получить имя пользователя - и, возможно, использовать его для поиска дополнительной информации о пользователе в базе данных.

Или, если вам действительно действительно постоянно нужна какая-то часть информации, вы можете реализовать свой собственный принципал, основанный на IPrincipal (это на самом деле не имеет большого значения!), И добавить туда эти фрагменты информации, и когда пользователь входит в систему, создает экземпляр MyCustomPrincipal и присоединяет его к текущему потоку. Тогда он будет доступен где угодно, где угодно и когда угодно.

Марк

1 голос
/ 18 июля 2009

У меня была точно такая же проблема, и я до сих пор не нашел удовлетворительного ответа. Все варианты, которые мы исследовали, имели различные проблемы. В конкретном примере, который вы упомянули, вы, очевидно, можете хранить эти данные в сеансе, поскольку это будет работать для этого примера. Могут быть и другие сценарии, которые у нас были, в которых это может не сработать, но простая пользовательская информация, подобная этой, подойдет для сессии.

Мы только что установили BaseController, который следит за тем, чтобы информация всегда была установлена ​​и корректна для каждого представления. В зависимости от того, как вы обрабатываете аутентификацию и т. Д., У вас всегда будут доступны некоторые пользовательские данные в HttpContext.User.Identity.Name. На которые также можно ссылаться.

0 голосов
/ 18 июля 2009

HttpContext.Current.Users.Identity возвращает информацию о текущем пользователе. Хотя я не уверен, передается ли он неявно, когда вы делаете вызов веб-службы.

0 голосов
/ 18 июля 2009

Не уверен, получу ли я то, что вы хотите спросить, но если вы ищете такие вещи, как аутентификация и авторизация на основе ролей, на самом деле ASP.net предоставляет отличную среду для работы / начала.

Эта статья (также со 2-ой частью) - это то, что я недавно обнаружил и прочитал о том, что действительно хорошо начинается с шаблона провайдера, который помогает понять базовую структуру аутентификации ASP.net. Обязательно прочитайте также о классе membersProvider и классе RoleProvider в msdn, они вместе составляют отличную основу для работы с большинством базовых функций проверки подлинности на основе ролей (если вам удобна предоставляемая ими функция, вам даже не нужно часть доступа к данным кода, все они представлены в реализации по умолчанию!)

PS: Проверьте свойство Context.Users тоже! Хранит текущую аутентифицированную информацию о пользователе.

0 голосов
/ 18 июля 2009

Вы должны сохранить это в Session и извлечь его в свои контроллеры через пользовательский ModelBinder.

0 голосов
/ 18 июля 2009

Постройте иерархию ваших моделей и поместите общую информацию в базовую модель. Таким образом, он будет доступен для любого или частичного просмотра.

Конечно, его нужно получать при каждом запросе, поскольку веб-приложения не являются постоянными.

...