CAML Queryyを使用して、ContentTypeを含むすべてのリストアイテムを取得していますが、現在のユーザーがそのファイルを表示する権限を持っているかどうかも知る必要があります。
その部分はどうすれば確認できますかわかりません。
この例を、コンテンツタイプに関連するアイテムを取得する方法のリファレンスとして使用します。
ありがとう。
CAML Queryyを使用して、ContentTypeを含むすべてのリストアイテムを取得していますが、現在のユーザーがそのファイルを表示する権限を持っているかどうかも知る必要があります。
その部分はどうすれば確認できますかわかりません。
この例を、コンテンツタイプに関連するアイテムを取得する方法のリファレンスとして使用します。
ありがとう。
SharePointのデフォルトでは、コードはWebリクエストを実行するユーザーになりすまして実行されます。したがって、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
引数を使用してのオーバーロードを呼び出す必要があるということです。オーバーロードなしでは、サイトの「現在のユーザー」が使用されます。これは、サイトがシステムアカウントトークンで開かれてからのシステムアカウントです。