代码之家  ›  专栏  ›  技术社区  ›  Ariel

使用SPWebConfigModification的SecurityException

  •  2
  • Ariel  · 技术社区  · 16 年前

    当我试图以编程方式修改web.config时,我得到了一个SecurityException,“拒绝访问”。

    代码紧跟其后 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 回复  |  直到 15 年前
        1
  •  3
  •   Per Jakobsen    16 年前

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

    添加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>
    
        2
  •  0
  •   zincorp    16 年前

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

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

        3
  •  0
  •   Junx    16 年前

    而不是使用spcontext.current.web.currentuser.name;

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

        4
  •  0
  •   Community Mohan Dere    8 年前

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

    这是我之前发表的关于这个主题的一个问题。

    Modifying SharePoint app Web.config file with Forms Based Authentication