почему RunWithElevatedPrivileges не работает в приемнике событий itemAdded?

в моем проекте 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;
                    }
                 }
             }

person hossein hashemian    schedule 04.07.2019    source источник


Ответы (2)


При получении объекта SPList обязательно используйте расширенную сеть. Не использовать SPWeb из текущего SPContext или свойств приемника событий.

Итак, в вашем случае получение списка должно выглядеть так:



    SPSecurity.RunWithElevatedPrivileges(delegate ()
    {
        using (SPSite site = new SPSite(properties.SiteId))
        {
            using (SPWeb web = site.OpenWeb(properties.Web.ID))
            {
                web.AllowUnsafeUpdates = true;
                SPList someList = web.Lists.tryGetList("LISTNAME");
                SPListItem newItem = someList.AddItem();
                // .... update columns and newItem.Update()
                web.AllowUnsafeUpdates = false;
            }
        }
    }

если это не поможет, предоставьте немного больше кода для проверки и, возможно, присутствующую ошибку.

person Adam    schedule 04.07.2019
comment
спасибо @Adam, проблема заключалась в уровне привилегий пользователя. Это было только на уровне просмотра - person hossein hashemian; 10.07.2019

Я написал некоторый код (LogInfo("event@receiver@start!");), чтобы зарегистрировать, что происходит в моем коде, и неожиданно обнаружил, что даже первая строка функции ItemAdded не выполняется!!! Потому что в журналах 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;
                }
         }                
    });
}
person hossein hashemian    schedule 05.07.2019