Получение зарегистрированных пользователей, данного SPWEB, независимо от повышенных привилегий

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/65283

Вопрос

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

Объект Процесс вызова переходит, - это SPWEB.

Как это устарело код, я не могу изменить то, что отправляют процессы вызова, и вот проблема: Некоторые из них проходят в SPWEB, как оно есть, и некоторые отправляют в SPWEB, который находится в повышенных привалевых привале.Для возвышенных приводов зарегистрированные пользователи возвращаются в виде системы.

В обоих случаях я хочу получить текущий вошел в систему пользователя.

Это вообще возможно?

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

Решение

У вас есть две возможные ситуации здесь.

CASE A: Вы находитесь за пределами прогончиваемыхprevatePrivileges Case Вы можете получить повышенный экземпляр SPWEB, который был сохранен за пределами объема делегата RunwithelevirevileGes. Это код ужаса в большинстве случаев, но все еще возможно. В этом случае воссоздание нового экземпляра, основанного на URL повышенной, будет достаточно: новый экземпляр не будет быть повышенным, поэтому вы можете получить оттуда пользователя.

CASE B: Способ вы вызывается внутри прогонтелеваренныхprivileges, делегат В этом случае воссоздание экземпляра SPWEB не сделает вам никакого хорошего. Любой новый экземпляр все равно будет повышен, поэтому это не уходит. Чтобы избежать этой ситуации, вам нужно найти экземпляр, который был создан за пределами объема высоты. Как? Используя ваш контекст выполнения: например, в приемнике событий функций вы можете получить доступ к веб-экземпляру в свойствах события и т. Д. Поскольку вы находитесь в пользовательском методе, и вы не можете изменить полученные параметры, вам нужно получить доступ к какому-либо контексту. Не могли бы вы приберем к Spcontext.Current.Web? Этот экземпляр не повышен, поэтому пользователь должен быть текущим, который просматривает сайт. Тем не менее, вы можете быть в ситуации, когда контекст неверный / NULL, в этом случае AFAIK нет способа получить оригинальный пользователь из повышенного экземпляра: вам нужно будет хранить его где-нибудь (Совет: статический синглтон?) перед входом в контекст высота.


Редактировать

Что делать, если ваш метод вызывается внутри прогонтелевоващенныхprivileges, но вы не уверены в том, чтобы иметь действительный SPCONTEXT? Это всего лишь очень дикое предположение, но давайте подумаем об этом. RunwithelevatedPrivileges вернется к идентичности бассейна приложения, верно? Если нет пула приложений, это будет означать, что нет идентификации пула приложений, поэтому текущий пользователь снаружи и внутри делегата должен быть одинаковым. Если есть пул приложения, в большинстве случаев у вас будет SPCONTEX, который не передается определением. Есть также какой-то конкретный случай, когда вы работаете в рабочих местах таймера, и такие и контекст, это нулевой: в этом случае я считаю, что вы используете идентификацию пула приложения, так что еще раз, запускается с повышенным нет эффекта.

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

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

Поскольку Fazio заявил, что исходный разработчик, который сделал код негаси, который должен был использовал убедитель, чтобы пройти объект SPWEB, но в вашем случае нет, вы не можете!

Увеличение означает, что ваш объект SPWEB повышен к пользователю системы и вернет этот пользователь независимо от того, чтобы объект SPWEB не будет расположен!

SPUser loggedinUser = SPContext.Current.Web.CurrentUser;
.

Приведенный выше код будет работать, если выходит из приподнятого объекта SPWEB, но если его внутри повышенного блока он вернет системный счет, к сожалению,

Можете ли вы опубликовать какой-нибудь код?Или дайте нам еще больше информации, где вы собираетесь использовать объект SPWEB, который пропускается?Может быть, вы можете использовать код выше в текущем объекте Open SPWEB, а затем установите объект SPWEB на повышенный объект?

Но короткий ответ - нет, вы не можете получить фактическую запись пользователями от повышенного пользователя!

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