2011-02-04 1 views
0

Я создал сайт 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

Вы должны серьезно подумать, хотите ли вы активировать этот код. Создание изменений в web.config - это вещь администраторов, а не вещь пользователя.

Пожалуйста, прочитайте это: http://www.itidea.nl/index.php/access-denied-when-activating-a-feature/

С уважением, Анита

+0

+1 Из кода вы показали, эта функция должна быть активирована только один раз. Он должен быть скрытым, областью действия на уровне веб-приложения и активироваться на сервере с помощью PowerShell или STSADM. –