Sharepoint 2010, определить доступ к SPListItem на основе текущего пользователя - PullRequest
0 голосов
/ 28 июня 2011

Я использую CAML Queryy, чтобы получить все элементы списка, которые содержат ContentType, но мне также нужно знать, имеет ли Текущий пользователь разрешения для просмотра этого файла.

Эта часть, я не знаю, как я могу это проверить.

Я использую этот пример как справку о том, как получить элементы, связанные с типом контента.

https://sharepoint.stackexchange.com/questions/14566/how-to-find-all-documents-of-a-certain-content-type

Спасибо.

1 Ответ

1 голос
/ 28 июня 2011

По умолчанию в 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. Перегрузка без использования будет использовать «текущий пользователь» сайта. Это системная учетная запись с момента открытия сайта с помощью токена системной учетной записи.

...