У меня есть веб-часть, которая обращается к объектной модели SP, упакованная в сборку, которая подписана и развернута в GAC.Для web.config установлено «Полное» доверие, но моя веб-часть выдает SecurityException
.Обидные строки кода:
SPSecurity.RunWithElevatedPrivileges(new SPSecurity.CodeToRunElevated(() =>
{
foreach (SPGroup g in user.Groups)
{
identity += String.Format(",'{0}'", g.Name.ToLowerInvariant().Replace(@"\", @"\\"));
}
}));
Похоже, что исключение выдается при вызове RunWithElevatedPrivileges
(другими словами, мой делегат вообще не выполняется).Есть идеи?Я полностью сбит с толку.
update : вот как выглядел код, прежде чем я обернул его в метод RunWithElevatedPrivileges:
public MyWebPart()
{
context = new MyProject.Data.MyDataContext(ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString);
SPUser user = SPContext.Current.Web.CurrentUser;
identity = String.Format("'{0}'", user.LoginName.ToLowerInvariant().Replace(@"\", @"\\"));
foreach (SPGroup g in user.Groups)
{
identity += String.Format(",'{0}'", g.Name.ToLowerInvariant().Replace(@"\", @"\\"));
}
identity = '[' + identity + ']';
}
И исключение:
System.Security.SecurityException occurred
Message="Request failed."
Source="Microsoft.SharePoint"
StackTrace:
at Microsoft.SharePoint.SPBaseCollection.System.Collections.IEnumerable.GetEnumerator()
at MyProject.MyWebPart..ctor()
InnerException:
Судя по выделению, предоставленному помощником исключения, похоже, что попытка доступа к свойству SPUser.Groups является проблемой: user.Groups
.
Что меня действительно поразилосмущает то, что этот точный код работал нормально два дня назад, но у меня были некоторые другие проблемы с фермой, и в основном пришлось ее перестраивать.После того, как все остальное было восстановлено, я пошел и попытался добавить эту веб-часть на страницу, и эта проблема проявилась.Я попытался обернуть код в оболочку RunWithElevatedPrivileges
, чтобы посмотреть, смогу ли я выделить именно тот бит, который нарушен, но похоже, что все, что касается модели объекта SP, вызывает исключение, включая метод RunWithElevatedPrivileges
.
update2 : Я до сих пор не знаю реальной причины, по которой это не помогло, но это происходило, когда я пытался добавить веб-часть.После установки точек останова в отладчике я понял, что конструктор вызывался дважды;в первый раз все работало в точности так, как ожидалось, но во второй раз было сделано исключение.Я до сих пор понятия не имею, почему.Я нашел два способа обойти это: переместить нарушающий код из конструктора в более позднюю точку жизненного цикла веб-части или закомментировать код, чтобы добавить веб-часть, затем раскомментировать и повторно развернуть.
По-видимому, причина того, что это «сработало 3 дня назад», заключалась в том, что я давно добавил свою веб-часть на страницу, а затем добавил приведенный выше код в конструктор.Поскольку веб-часть уже была добавлена, я никогда не видел никаких проблем.Позже, когда мне недавно пришлось перестраивать сайт и снова добавлять веб-часть на страницу, эта проблема проявилась.Технически, это раньше не «работало», я просто не делал того, что делало его нехорошим.поэтому ответы на эти вопросы все еще приветствуются.