手順 1: カスタム セキュリティ トリマを作成する
このウォークスルーでは、Microsoft Visual Studio 2005 を使用して Microsoft Office SharePoint Server 2007 でのエンタープライズ検索 のカスタム セキュリティ トリマを作成、展開、および登録する方法について説明します。
手順 1. ではカスタム セキュリティ トリマを作成する方法について説明します。以下のタスクが含まれます。
カスタム セキュリティ トリマ プロジェクトをセットアップする
カスタム セキュリティ トリマをコーディングする
厳密な名前を持つカスタム セキュリティ トリマ プロジェクトをコンパイルする
カスタム セキュリティ トリマ プロジェクトをセットアップする
カスタム セキュリティ トリマ用のプロジェクトを作成するには
Visual Studio の [ファイル] メニューで、[新規作成] をポイントし、[プロジェクト] をクリックします。
[プロジェクトの種類] で、[C#] の [Windows] を選択します。
[テンプレート] の [クラス ライブラリ] を選択します。[名前] フィールドに「CustomSecurityTrimmerSample」と入力し、[OK] をクリックします。
次に、Web パーツ プロジェクトに必要な参照を追加する必要があります。
CustomSearchWebPart プロジェクトへの参照を追加するには
[プロジェクト] メニューの [参照の追加] をクリックします。
[.NET] タブで、以下の参照を選択した後、[OK] をクリックします。
- Microsoft.Office.Server.Search
注意
SharePoint サイトがフォーム認証を使用するように構成されている場合、ユーザー名にアクセスするには HttpContext クラスを使用する必要があるため、ここで参照を System.Web へ追加する必要もあります。
セキュリティ トリマのコードを追加する前に、既定のクラス ファイルを新しいクラス ファイルに置き換えます。
セキュリティ トリマ用のクラス ファイルを作成するには
ソリューション エクスプローラで、[Class1.cs] を右クリックして [削除] をクリックし、そのプロジェクトで作成された既定のクラスを削除します。
[プロジェクト] メニューの [新しいアイテムの追加] をクリックします。
[新しいアイテムの追加] ダイアログ ボックスで、[クラス] をクリックし、「CustomSecurityTrimmer.cs」と入力して [追加] をクリックします。
カスタム セキュリティ トリマ コードを記述する
CustomSecurityTrimmer の既定のコードを変更するには
以下の using ステートメントを、他の名前空間ディレクティブを含むコードの上部付近に追加します。
using System.Collections; using System.Collections.Specialized; using System.Security.Principal; using Microsoft.Office.Server.Search.Query; using Microsoft.Office.Server.Search.Administration;
次のように、CustomSecurityTrimmer クラスがクラス定義で ISecurityTrimmer インターフェイスを実装することを指定します。
public class CustomSecurityTrimmer : ISecurityTrimmer
これで、ISecurityTrimmer インターフェイス メソッドを実装するためのコードを記述する準備ができました。
ISecurityTrimmer インターフェイス メソッドを実装するには
Initialize() メソッド宣言用の以下のコードを追加します。
public void Initialize(NameValueCollection trimmerProps, SearchContext searchCxt) { }
このサンプルの基本バージョンでは、Initialize メソッドにコードが含まれていません。「手順 3 (省略可能): 確認済みクロール URL 数の構成可能限度を指定します。」にある Initialize メソッドには実装例が含まれています。
Initialize メソッドの実装の詳細については、「エンタープライズ検索結果のカスタム セキュリティ トリミングの概要」を参照してください。
CheckAccess() メソッド宣言用の以下のコードを追加します。
public BitArray CheckAccess(IList<String> crawlURLs,IDictionary<String,Object> sessionProperties) { //CheckAccess method implementation, see steps 3-5. }
CheckAccess メソッド実装の最初の部分では、次のように、BitArray 変数を宣言して初期化し、crawlURLs コレクション内の各 URL のアクセス チェックの結果を格納して、クエリを送信したユーザーのユーザー名を取得します。
BitArray retArray = new BitArray(crawlURLs.Count); //For Windows authentication, uncomment the next line: //string strUser = WindowsIdentity.GetCurrent().Name; //For Forms authentication, uncomment the next line: //string strUser = HttpContext.Current.User.Identity.Name;
コレクション内の各クロール URL をループし、アクセス チェックを実行して、クエリを送信したユーザーがクロール URL に関連付けられたコンテンツ アイテムにアクセスできるかどうかを判断します。
次のように、ユーザーがコンテンツ アイテムにアクセスできる場合は、そのインデックス retArray[x] にある BitArray アイテムの値を true に設定します。それ以外の場合は、false に設定します。
for (int x = 0; x < crawlURLs.Count; x++) { /* To fully implement the security trimmer, add code to perform the security check and determine if strUser can access crawlURLs[x]. If strUser can access crawlURL[x], then: */ retArray[x] = true; //If not: retArray[x] = false; }
次のように、CheckAccess メソッドの戻り値を retArray に設定します。
return retArray;
厳密な名前を持つカスタム セキュリティ トリマ プロジェクトをコンパイルする
厳密な名前を持つカスタム セキュリティ トリマ プロジェクトをコンパイルするには
Visual Studio 2005 の [プロジェクト] メニューで、[CustomSecurityTrimmerSample のプロパティ] をクリックします。
[署名] で、[アセンブリの署名] を選択します。
[厳密な名前のキー ファイルを選択してください] で、[新規作成] を選択します。[キー ファイル] に、キー ファイルの名前を入力し、[OK] をクリックします。
注意
既存のキー ファイルを使用する場合は、この手順で [新規作成] ではなく [参照] を選択し、既存のファイルを探します。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
次の手順
「手順 2 : カスタム セキュリティ トリマの配置および登録」では、カスタム セキュリティ トリマを展開および登録します。
「手順 3 (省略可能): 確認済みクロール URL 数の構成可能限度を指定します。」には、カスタム セキュリティ トリマによってチェックされるアイテム数に対して構成可能な制限を実装する方法を示す、カスタム セキュリティ トリマ クラスの変更されたバージョンが含まれています。
例
以下は、この手順で説明した、CustomSecurityTrimmerSample クラスの完全なサンプル コードです。
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Server.Search.Query;
using Microsoft.Office.Server.Search.Administration;
//For Windows Authentication
using System.Security.Principal;
//For Forms Authenticaion
using System.Web;
using System.Collections.Specialized;
using System.Collections;
namespace CustomSecurityTrimmerSample
{
class CustomSecurityTrimmer : ISecurityTrimmer
{
public void Initialize(NameValueCollection trimmerProps, SearchContext searchCxt)
{
}
public BitArray CheckAccess(IList<String> crawlURLs, IDictionary<String, Object> sessionProperties)
{
BitArray retArray = new BitArray(crawlURLs.Count);
//For Windows authentication, uncomment the next line:
//string strUser = WindowsIdentity.GetCurrent().Name;
//For Forms authentication, uncomment the next line:
//string strUser = HttpContext.Current.User.Identity.Name;
for (int x = 0; x < crawlURLs.Count; x++)
{
/*
To fully implement the security trimmer,
add code to perform the security check
and determine if strUser can access crawlURLs[x].
If strUser can access crawlURL[x], then:
*/
retArray[x] = true;
//If not:
retArray[x] = false;
}
return retArray;
}
}
}
See Also
参照
Microsoft.Office.Server.Search.Query.ISecurityTrimmer
概念
エンタープライズ検索結果のカスタム セキュリティ トリミングの概要
[ウォークスルー] 検索結果にカスタム セキュリティ トリマを使用する