Как получить spuser по логину без использования SPWeb.EnsureUser()

Я хочу получить SPUser Объект по имени пользователя в C#.

В моей программе я получил DataTable от SPListItemCollection и пытается получить объект SPUser в цикле foreach.

Вот фрагмент кода, который показывает, как я пытаюсь получить SPUser

SPUser usera = new SPFieldUserValue(web, Convert.ToString(dr["OnlyUser"])).User;

но я получил сообщение об ошибке:

Значение не попадает в ожидаемый диапазон

Ошибка возникает из-за SPFieldUserValue требует определенного формата ([int];#[domain]\[username]), Я потерпел неудачу, потому что он возвращает имя пользователя только из DataTable.

Поэтому кто-нибудь знает, как получить spuser obj по loginName без использования SPWeb.EnsureUser() потому что это добавит пользователя на сайт, если он еще не добавлен.

1 ответ

Информация о пользователе хранится в списке на корневом сайте семейства сайтов. Когда вы вызываете SPWeb.EnsureUser он проверяет этот список и добавляет пользователя в этот список, если его там еще нет.

Вы можете получить доступ к этому списку напрямую, чтобы проверить, есть ли у кого-то уже запись. Доступ к списку можно получить через SiteUserInfoList собственность на SPWeb объект.

Обратите внимание, что идентификатор записи пользователя в списке информации о пользователе - это номер, который отображается перед ;# в строковом представлении пользователя.

Все, что сказал, вы уверены, что вам нужно избегать использования SPWeb.EnsureUser? Он добавляет пользователя в список информации, если у него нет записи в списке, но он автоматически не предоставляет им доступ к сайту, если вас это беспокоит.

Другие вопросы по тегам