アプリケーションページで高い特権で実行する方法は?
-
16-10-2019 - |
質問
現在のユーザーがアクセスできないリストアイテムを取得したいのですが、コードで入手する必要があります。使用するとき SPSecurity.RunWithElevatedPrivileges
それはうまくいきません。
アプリケーションページで現在のコンテキストのWebオブジェクトを使用しているためです。
コードを機能させたい場合は、別のSPSiteとSPWEBオブジェクトを作成する必要があります RunWithElevatedPrivileges
委任しますが、私はそれをしたくありません。
アプリケーションページの現在のWebコンテキストを使用してこれを達成するにはどうすればよいですか?
解決
現在のコンテキストのSPSITEおよびSPWEBオブジェクトのIDプロパティを使用して、RunWithEREVEDATEDPRIVILEGES()デリゲート内の新しいSPSITEおよびSPWEBオブジェクトをインスタンス化する必要があります。
Guid siteId = SPContext.Current.Site.ID;
Guid webId = SPContext.Current.Web.ID;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(siteId))
{
using (SPWeb web = site.OpenWeb(webId))
{
// Your code here
}
}
});
RunWithededPrivileges()Delegateで新しいSPSITEおよびSPWEBオブジェクトを作成したくない理由を尋ねてもいいですか?上記のデザインパターンを使用している場合、作成した新しいオブジェクトでdispose()を呼び出すことを心配する必要はありません。
他のヒント
おかげで、それは私たちを大いに助けてくれました。素晴らしい答え:)
から spsecurity.runwithelevatedprivileges:
「デリゲートの外側で作成されたSPSITEオブジェクトは、デリゲート内で参照できますが、オブジェクトのメソッドとプロパティ評価者は、オブジェクトが作成されたユーザーコンテキストの特権で実行されます。
基本的に、あなた しなければならない 完全な制御権を持って実行するために、デリゲート内に新しいオブジェクトを作成します。
URLまたはGUIDを使用して、spsecurity.runwithelevatedprivilegesブロック内に新しいspsiteを作成する必要があります。
spsecurity.runwithededprivilegesおよびその他のなりすましのテクニックに関する詳細な情報については、これをチェックしてください。