事件接收器中ItemAdded处理程序中的UnauthorizedAccessException异常

时间:2013-06-06 10:22:09

标签: sharepoint-2010

我有一个sharepoint sitecollection有两个站点,分别是site1和site2。

我有一个用户,在site1中提供了预授权,在site2中提供了读取权限。

我在site1的list1中添加了一个事件接收器,用于在site2的list2中移动相同的记录。

public override void ItemAdded(SPItemEventProperties properties)    
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
 using (SPSite site = properties.OpenSite())
 {
   using (SPWeb web = site.OpenWeb("/site2"))
   {
    web.AllowUnsafeUpdates = true;
    SPList list = web.Lists["List2"];
    SPListItem item = list.Items.Add();
    item["Title"] = "test";
    item.Update();
    web.AllowUnsafeUpdates = false;
   }
  }
 });
   }

我尝试使用RunWithElevatedPrivileges甚至AllowUnsafeUpdates但不幸的是它不适用于我的情况。在Update()上抛出UnauthorizedAccessException。

{System.UnauthorizedAccessException:
    <nativehr>0x80070005</nativehr><nativestack></nativestack>

我正在使用sharepoint 2010 sp1和aug2012累积更新。

2 个答案:

答案 0 :(得分:2)

您必须从站点ID:

启动spsite的新上下文
SPSecurity.RunWithElevatedPrivileges(delegate() { 
 using (SPSite site = new SPSite(item.Web.Site.ID)) 
 { 
  using (SPWeb web = site.OpenWeb("1")) 
  { 
   SPListItem curritem = web.Lists[item.ListItems.List.Title].Items.GetItemById(item.ID); 
  } 
 }
});

答案 1 :(得分:1)

就我而言,在开发环境中,我只是将执行部署或调试模式的用户放在:网站集管理员中并且它可以工作。没有更多例外。

我正在与网站集管理员中的用户一起运行PowerShell脚本,并且不需要添加SPSecurity或RunWith ......