По умолчанию в SharePoint наш код исполняется как пользователь, выполняющий веб-запрос. Таким образом, элементы, возвращаемые запросом CAML, уже обрезаны по безопасности. Это означает, что набор результатов содержит только элементы, которые текущий пользователь может "видеть".
В некоторых случаях вам необходимо выполнить запрос CAML с системными привилегиями. Для этого объект SPSite
должен быть открыт токеном системной учетной записи:
using (SPSite elevatedSite = new SPSite("http://server-url", SPUserToken.SystemAccount))
{
// open web; list;
// execute caml query with system account priveliges.
}
В этом случае вы можете проверить / обеспечить разрешения для определенного элемента списка с помощью метода DoesUserHavePermissions
:
SPListItem item = //...
if (item.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser, SPBasePermissions.ViewListItems))
{
// futher actions if user has permission goes here.
}
Важно отметить, что вы должны вызывать перегрузку DoesUserHavePermissions
с аргументом SPUser
. Перегрузка без использования будет использовать «текущий пользователь» сайта. Это системная учетная запись с момента открытия сайта с помощью токена системной учетной записи.