Я создал сайт FBA в ферме SharePoint 2010. Сайт позволяет использовать как окна, так и FBA-аутентификацию. Я установил администратор сервера (член встроенного администратора) как идентификатор пула приложений. У той же учетной записи есть достаточное разрешение в базе данных сервера Sql для сайта.Изменение файла web.config программно с помощью метода WebService.ApplyWebConfigModifications() дает ошибку
У меня есть одна функция. Эта функция, в свою очередь, изменяет web.Config для сайтов в ферме. Я разместил код внутри блока SPSecurity.RunWithElevatedPrivileges.
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
Guid siteGuid = ((SPWeb)properties.Feature.Parent).Site.ID;
Guid webGuid = ((SPWeb)properties.Feature.Parent).ID;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(siteGuid))
{
using (SPWeb web = site.OpenWeb(webGuid))
{
SPWebApplication webApp = web.Site.WebApplication;
SPWebConfigModification myModification = new SPWebConfigModification("add[@name=\"assembly\"]", "/configuration/system.web/compilation/assemblies");
myModification.Value = "<add assembly=\"MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9e00227b2bfdcg7e\"/>";
myModification.Sequence = 0;
myModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
myModification.Owner = typeof(<MyWebpartNameGoesHere>).FullName;
webApp.WebConfigModifications.Add(myModification);
webApp.WebService.ApplyWebConfigModifications();
webApp.Update();
}
}
});
}
Кодекс работает прекрасно для любого пользователя окна. Но когда я вхожу на сайт как пользователь FBA и пытаюсь активировать эту функцию, я начинаю получать ошибку «Доступ запрещен».
Ошибка: System.Security.SecurityException: Доступ запрещен. в Microsoft.SharePoint.Administration.SPPersistedObject.BaseUpdate() в Microsoft.SharePoint.Administration.SPWebApplication.ApplyWebConfigModifications() в Microsoft.SharePoint.Administration.SPWebService.ApplyWebConfigModifications()
Может кто-нибудь помочь мне решить эту проблему проблема?
+1 Из кода вы показали, эта функция должна быть активирована только один раз. Он должен быть скрытым, областью действия на уровне веб-приложения и активироваться на сервере с помощью PowerShell или STSADM. –