0

我有一个共享点站点集合,其中有两个站点,分别是站点 1 和站点 2。

我有一个用户,在 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>

我正在使用带有 aug2012 累积更新的 sharepoint 2010 sp1。

4

2 回答 2

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); 
  } 
 }
});
于 2013-06-24T21:01:59.617 回答
1

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

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

于 2015-11-13T19:35:35.073 回答