从codebehind创建新网站时SharePoint 2010访问被拒绝
我有一个sharepoint问题。我在列表上有一个事件处理程序,每当有人在列表中添加一个新项目时,我都想创建一个包含所需详细信息的新网站。当不是网站集管理员的不同用户添加项目时,就会出现问题。在从codebehind创建新网站时SharePoint 2010访问被拒绝,sharepoint,access-denied,elevated-privileges,Sharepoint,Access Denied,Elevated Privileges,我有一个sharepoint问题。我在列表上有一个事件处理程序,每当有人在列表中添加一个新项目时,我都想创建一个包含所需详细信息的新网站。当不是网站集管理员的不同用户添加项目时,就会出现问题。在Web.Webs.Add()方法中,我得到了错误: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)). 请注意,我使用的是SPSecurity.RunWithElevatedPrivileges委托 下面是一
Web.Webs.Add()方法中,我得到了错误:
Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).
请注意,我使用的是SPSecurity.RunWithElevatedPrivileges
委托
下面是一个代码示例:
public override void ItemAdded(SPItemEventProperties properties)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
string url = "the url";
if (Array.IndexOf(properties.Web.Webs.Names, url) >= 0)
{
properties.Web.Webs.Delete(url);
}
SPWeb newWeb = properties.Web.Webs.Add(url, "title", "description", properties.Web.Language, "STS#1", false, false);
});
}
谢谢。我知道了。问题是我调用的web没有提升,所以我这样做:
public override void ItemAdded(SPItemEventProperties properties)
{
SPWeb web = properties.Web;
SPListItem currentItem= properties.ListItem;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(web.Site.ID))
{
using (SPWeb elevWeb = site.OpenWeb(web.ID))
{
SPList elevList = ListUtils.GetList(elevWeb, "list");
SPListItem elevItem = elevList.Items[currentItem.UniqueId];
elevWeb.AllowUnsafeUpdates = true;
string url = "the url";
if (Array.IndexOf(elevWeb.Webs.Names, url) >= 0)
{
elevWeb.Webs.Delete(url);
}
SPWeb newWeb = elevWeb.Webs.Add(url, "title", "description", elevWeb.Language, "STS#1", false, false);
}
}
});
}