为什么RunWithElevatedPrivileges在itemAdded eventreceiver中不起作用?

时间:2019-07-04 17:12:08

标签: c# sharepoint event-receiver

在我的eventreceiver项目itemAdded函数中,我的代码打算将项目添加到第二个列表中,但不适用于某些特权较低的用户

SPSecurity.RunWithElevatedPrivileges(delegate ()
            {
                using (SPSite site = new SPSite(properties.SiteId))
                {
                    using (SPWeb web = site.OpenWeb(properties.Web.ID))
                    {
                        web.AllowUnsafeUpdates = true;
                        //my code
                        web.AllowUnsafeUpdates = false;
                    }
                 }
             }

2 个答案:

答案 0 :(得分:1)

获取SPList对象时,请确保使用提升的网站。不要从当前的SPContext或事件接收器属性中使用SPWeb。

因此,在您的情况下,获取列表应如下所示:

list

如果这不能解决问题,请提供更多代码检查,并可能出现错误。

答案 1 :(得分:0)

我写了一些代码(LogInfo(“ event @ receiver @ starting!”);)来记录代码中发生的事情,令人惊讶的是,我什至发现ItemAdded Function的第一行都没有执行! 因为在shapreoint日志中未找到任何内容。这意味着它没有输入ItemAdded函数或其他内容。 这是我的代码:

public override void ItemAdded(SPItemEventProperties properties)
{
    LoLogInfo("event@receiver@ starting!");
    SPSecurity.RunWithElevatedPrivileges(delegate ()
    {
        LogInfo("event@receiver@ first step!");
        using (SPSite site = new SPSite(properties.SiteId))
        {
            LogInfo("event@receiver@ second step!");
            using (SPWeb web = site.OpenWeb(properties.Web.ID))
            {
                LogInfo("event@receiver@ third step!");
                SPList activeList = web.Lists.TryGetList(properties.List.Title);
                SPList finalList = web.Lists[FinalListName];
                web.AllowUnsafeUpdates = true;
                SPListItem finalListItem = finalList.AddItem();
                LogInfo("event@receiver@ forth step!");
                //some other code here
                web.AllowUnsafeUpdates = false;
                }
         }                
    });
}