次の方法で共有


手順 3 (省略可能): 確認済みクロール URL 数の構成可能限度を指定します。

このウォークスルーでは、Microsoft Visual Studio 2005 を使用して Microsoft Office SharePoint Server 2007 でのエンタープライズ検索 のカスタム セキュリティ トリマを作成、展開、および登録する方法について説明しています。

stsadm ユーティリティを使用してカスタム セキュリティ トリマを登録する場合は、registersecuritytrimmer 操作に関するオプションの構成プロパティを指定できます。このことにより、構成可能な設定を持つカスタム セキュリティ トリマの作成がサポートされます。

たとえば、セキュリティ トリマがチェックするアイテムの数に対して構成可能な制限を持つカスタム セキュリティ トリマを作成できます。これはオプションですが、カスタム セキュリティ トリマの実装になんらかの種類の制限を含めることを推奨します。詳細については、「エンタープライズ検索結果のカスタム セキュリティ トリミングの概要」を参照してください。

手順 3. では、チェックされるドキュメント数に対する構成可能な制限を持つカスタム セキュリティ トリマを作成および登録する方法を示し、以下の作業について説明します。

  • カスタム セキュリティ トリマをコーディングする

  • カスタム セキュリティ トリマを登録する

このサンプルで説明しているカスタム セキュリティ トリマは、「手順 1: カスタム セキュリティ トリマを作成する」および「手順 2 : カスタム セキュリティ トリマの配置および登録」で説明しているトリマと同じです。ただし、このカスタム セキュリティ トリマでは、実装に制限を設定する追加手順を組み込み、カスタム セキュリティ トリマの登録に使用する stsadm ユーティリティ コマンドを変更しています。

カスタム セキュリティ トリマをコーディングする

ここで説明している作業を開始する前に、「手順 1: カスタム セキュリティ トリマを作成する」の説明に従って、CustomSecurityTrimmer プロジェクトを作成し、CustomSecurityTrimmer クラスを変更します。

注意

このトピックでは、手順 1. および手順 2. で既に指定した手順については繰り返し説明しません。異なる作業についてのみ説明します。前の手順については、「手順 1: カスタム セキュリティ トリマを作成する」および「手順 2 : カスタム セキュリティ トリマの配置および登録」を参照してください。

カスタム セキュリティ トリマをコーディングするには

  1. クラス宣言を変更して ISecurityTrimmer インターフェイスを実装した後に、以下のように制限値の変数を宣言します。

    class CustomSecurityTrimmer : ISecurityTrimmer
    {
        /*
           Sets a default limit of 200. You can change this 
           to a value that meets your specific requirements.
        */ 
        private int intCheckLimit = 200;
    
  2. チェックされたアイテム数を構成された制限と比較するメソッドを作成して、以下のコードを追加します。

    private bool CheckLimit(IDictionary<String, Object> sessionProperties, int numChecks)
    {
        Object currentCount;
        sessionProperties.TryGetValue("currentCheckCount", out currentCount);
        if (currentCount == null)
        {
            sessionProperties["currentCheckCount"] = numChecks;
            return (true);
        }
        int currentCountInt = Convert.ToInt32(currentCount);
        currentCountInt += numChecks;
        sessionProperties["currentCheckCount"] = currentCountInt;
        if (currentCountInt <= intCheckLimit)
        {
            return true;
        }
        else
        {
        return false;
        }
    }
    
  3. カスタム セキュリティ トリマのサンプルのコードを完了するには、「手順 1: カスタム セキュリティ トリマを作成する」で説明されている Initialize() メソッドの実装および「CheckAccess()」メソッのド実装を変更する必要があります。

ISecurityTrimmer インターフェイス メソッドの実装を変更するには

  1. Initialize() メソッドに以下のコードを追加します。

    if (trimmerProps["CheckLimitProperty"] != null)
    {
       intCheckLimit = Convert.ToInt32(trimmerProps["CheckLimitProperty"]);
    }
    

    このコードでは、セキュリティ トリマがチェックするドキュメントの最大数の制限を CheckLimitProperty という構成プロパティの値に設定します。

    注意

    構成プロパティは、セキュリティ トリマを登録するときに指定できます。

  2. メソッド宣言の直後の CheckAccess() メソッドに次のコードを追加します。

    if (!this.CheckLimit(sessionProperties, crawlURLs.Count))
    {
        throw (new PluggableAccessCheckException("<Display Message>"));
    }
    

    次のコードでは、CheckLimit メソッドを呼び出します。制限に達した場合、このメソッドは false を戻します。この場合、PluggableAccessCheckException 例外がトリガされ、検索結果ではなく、PluggableAccessCheckException コンストラクタで指定されているテキストが、検索結果ユーザー インターフェイスに表示されます。

カスタム セキュリティ トリマを登録する

この手順を開始する前に、「手順 2 : カスタム セキュリティ トリマの配置および登録」の説明に従って、グローバル アセンブリ キャッシュに CustomSecurityTrimmerSample.dll を展開する必要があります。その後、stsadm ユーティリティを使用して、カスタム セキュリティ トリマを登録することができます。

次の手順は、ID を 1 (SharedServices1 Shared Services Provider (SSP)) に設定し、FileServer1 という名前のサーバーのファイル共有に置かれたコンテンツに適用するように、カスタム セキュリティ トリマを登録する方法を示しています。また、CheckLimitProperty 構成設定の値を 300 に設定します。

CheckLimitProperty 構成設定を使用してカスタム セキュリティ トリマを登録するには

  • コマンド プロンプトで、次のコマンドを入力します。

    stsadm -o registersecuritytrimmer -ssp SharedServices1 -id 1 -typeName "CustomSecurityTrimmerSample.clsCustomSecurityTrimmer, CustomSecurityTrimmerSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=<token>" -rulepath file://FileServer1/* -configprops CheckLimitProperty~300 
    

以下は、この手順で説明した、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
    {
        private int intCheckLimit = 200;
        public void Initialize(NameValueCollection trimmerProps, SearchContext searchCxt)
        {
            if (trimmerProps["CheckLimit"] != null)
            {
                intCheckLimit = Convert.ToInt32(trimmerProps["CheckLimit"]);
            }
        }

        public BitArray CheckAccess(IList<String> crawlURLs, IDictionary<String, Object> sessionProperties)
        {
            BitArray retArray = new BitArray(crawlURLs.Count);
            if (!this.CheckLimit(sessionProperties, crawlURLs.Count))
            {
                throw (new PluggableAccessCheckException("Reached Limit"));
            }
        //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++)
            {
               /*
                Add code here to check if
                strUser can access crawlURLs[x]. 
                If so:
                retArray[x] = true;
                If not:
                retArray[x] = false;
              */
            }
            return retArray;
        }

        private bool CheckLimit(IDictionary<String, Object> sessionProperties, int numChecks)
        {
            Object currentCount;
            sessionProperties.TryGetValue("currentCheckCount", out currentCount);
            if (currentCount == null)
            {
                sessionProperties["currentCheckCount"] = numChecks;
                return (true);
            }
            int currentCountInt = Convert.ToInt32(currentCount);
            currentCountInt += numChecks;
            sessionProperties["currentCheckCount"] = currentCountInt;
            if (currentCountInt <= intCheckLimit)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

See Also

参照

Microsoft.Office.Server.Search.Query.ISecurityTrimmer

Microsoft.Office.Server.Search.Query.PluggableAccessCheckException

概念

エンタープライズ検索結果のカスタム セキュリティ トリミングの概要

[ウォークスルー] 検索結果にカスタム セキュリティ トリマを使用する

手順 1: カスタム セキュリティ トリマを作成する

手順 2 : カスタム セキュリティ トリマの配置および登録