使用SPWebConfigModification的SecurityException

时间:2010-02-15 17:15:20

标签: sharepoint

我在尝试以编程方式进行web.config修改时遇到SecurityException,“Access Denied”。

代码紧跟this example

    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(),得到相同的异常,然后继续附上越来越多的代码,以封闭所有FeatureActivated()。)

欢迎提示,谢谢。

4 个答案:

答案 0 :(得分:3)

我没有按照要求回答您的问题,但为什么使用功能接收器添加SafeControl条目?

添加SafeControl条目的“正确”方法是将这些条目嵌入&lt; SafeControls&gt;在相应的&lt; Assembly&gt;内在您的解决方案的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>

答案 1 :(得分:0)

出于纯粹的好奇心,web.config是否设置为只读?您是否在inetpub中检查了web目录的文件系统权限?

此外,这是在Web应用程序级别还是更低级别激活?

答案 2 :(得分:0)

而不是使用SPContext.Current.Web.CurrentUser.Name;

请尝试按照此处的说明模拟SystemAccount: http://blackninjasoftware.com/2009/04/09/how-to-programmatically-impersonate-users-in-sharepoint/

答案 3 :(得分:0)

另一个问题是,您是否从基于表单的身份验证站点激活该功能?您可能会遇到问题,因为网站集管理员来自身份验证提供程序路径,而不是AD。 Web.Config文件安全性基于AD帐户,因此您无法在不做错的情况下更新web.config,例如让Everyone访问web.config。

这是我在该主题上发布的早期问题。

Modifying SharePoint app Web.config file with Forms Based Authentication