我在尝试以编程方式进行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()。)
欢迎提示,谢谢。
答案 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