Sharepoint 2010, определение доступа к SPListItem на основе текущего пользователя
Я использую CAML Queryy, чтобы получить все элементы списка, которые содержат ContentType, но мне также нужно знать, имеет ли Текущий пользователь разрешения для просмотра этого файла.
Эта часть, я не знаю, как я могу это проверить.
Я использую этот пример как ссылку на то, как получить элементы, связанные с типом контента.
Благодарю.
1 ответ
По умолчанию в 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
аргумент. Перегрузка без использования будет использовать "текущий пользователь" сайта. Это системная учетная запись с момента открытия сайта с помощью токена системной учетной записи.