2011-06-28 44 views
0

CAMLクエリを使用してコンテンツタイプのすべてのリストアイテムを取得していますが、現在のユーザーにそのファイルを表示する権限があるかどうかを知る必要もあります。Sharepoint 2010、現在のユーザーに基づいてSPListItemへのアクセスを確認する

どのように私はそれを確認することができませんその部分は分かりません。

このexmplaは、コンテンツタイプに関連するアイテムを取得する方法のリファレンスとして使用します。

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

感謝。

+0

ユーザー*になりすましながらリソース*にアクセスしてみてください。あなたが承認されていない場合、SPはあなたに知らせます。 –

答えて

1

SharePointのデフォルトでは、コードはWeb要求を実行するユーザーとして偽装されます。したがって、CAMLクエリによって返されたアイテムは、すでにセキュリティトリムされています。つまり、結果セットには、現在のユーザーが「参照」できる項目のみが含まれます。

状況によっては、システムpriveligesを使用して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. 
} 

重要あなたがSPUser引数を使ってDoesUserHavePermissionsのオーバーロードを呼び出さなければならないことに注意してください。過負荷はサイトの「現在のユーザー」を使用しません。サイトがシステムアカウントトークンで開かれて以来のシステムアカウントはどれですか。

+0

ありがとうtheEe.DoesHavePermission私のために働く。 –

+0

他の質問、私は同じことをする必要がありますが、クレーム、そのtheresをもう一度行うには??、ありがとう。 –

+0

Stefanからの上記の答えは間違っています。ページが匿名でアクセスされるとエラーになるためです。 'SPContext.Current.Web.CurrentUser is null'であるためです。誰かがこの問題に対処する答えを持っていますか? – DaRula

関連する問題