我有一个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累积更新。
答案 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 ......