SecurityException с использованием SPWebConfigModification - PullRequest
2 голосов
/ 15 февраля 2010

Я получаю исключение SecurityException «Отказано в доступе» при попытке программного изменения web.config.

Код точно соответствует этому примеру :

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        // create modification
        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            SPWebConfigModification m = new SPWebConfigModification();
            m.Path = "configuration/SharePoint/SafeControls";
            m.Name = string.Format(CultureInfo.InvariantCulture, "SafeControl[@Assembly='{0}'][@Namespace='{1}'][@TypeName='*'][@Safe='True']", ADSWebPart.GetAssemblyFullName(), ADSWebPart.GetNamespace());
            m.Sequence = 0;
            m.Owner = SPContext.Current.Web.CurrentUser.Name;
            m.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
            m.Value = string.Format(CultureInfo.InvariantCulture, "<SafeControl Assembly='{0}' Namespace='{1}' TypeName='*' Safe='True' />", ADSWebPart.GetAssemblyFullName(), ADSWebPart.GetNamespace());

            // apply modification
            SPWebService service = SPWebService.ContentService;
            service.WebConfigModifications.Add(m);
            service.Update();
            service.ApplyWebConfigModifications();
        });
    }

(я начал без вызова RunWithElevatedPrivileges (), получил то же исключение, затем продолжал включать все больше и больше кода вплоть до всего тела FeatureActivation ().)

Идеи приветствуются, спасибо.

Ответы [ 4 ]

3 голосов
/ 16 февраля 2010

Я не отвечаю на ваш вопрос в том виде, в котором его спросили, но почему вы используете приемник функций для добавления записей SafeControl?

«Правильный» способ добавить записи SafeControl - это вставить их внутрь внутри соответствующего в manifest.xml вашего Решения следующим образом:

<Assembly Location="MyLib.dll" DeploymentTarget="WebApplication">
  <SafeControls>
    <SafeControl Assembly="MyLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4489c7aa5341e32c" Namespace="MyNs" TypeName="*" Safe="True" />
  </SafeControls>
</Assembly>
0 голосов
/ 16 февраля 2010

Другой вопрос, активируете ли вы функцию с сайта аутентификации на основе форм? У вас могут быть проблемы, потому что администратор семейства сайтов находится на пути провайдера аутентификации, а не на AD. Безопасность файлов Web.Config основана на учетной записи AD, поэтому у вас нет возможности обновлять web.config, не делая ничего плохого, например, предоставляя всем доступ к web.config.

Вот более ранний вопрос, который я разместил в теме.

Изменение файла Web.config приложения SharePoint с помощью проверки подлинности на основе форм

0 голосов
/ 16 февраля 2010

Вместо использования SPContext.Current.Web.CurrentUser.Name;

Попробуйте выполнить следующие инструкции, чтобы выдать себя за SystemAccount: http://blackninjasoftware.com/2009/04/09/how-to-programmatically-impersonate-users-in-sharepoint/

0 голосов
/ 15 февраля 2010

Из чистого любопытства, web.config установлен только для чтения? Вы проверили разрешения на файловую систему для веб-каталога в inetpub?

Кроме того, это активируется на уровне веб-приложения или ниже?

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