0

我有一个共享点问题。我在列表上有一个事件处理程序,每当有人在列表中添加新项目时,我想创建一个包含所需详细信息的新网站。当不是网站集管理员的不同用户添加该项目时,就会出现问题。在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);
    });
}

谢谢。

4

1 回答 1

0

我知道了。问题是我打电话的网络没有提升,所以我做了这样的事情:

 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);
                    }
                }
            });
        } 
于 2013-02-21T14:03:31.730 回答