Freigeben über


Exemplarische Vorgehensweise: Verwenden eines benutzerdefinierten Security Trimmer für SharePoint Server-Suchergebnisse

Letzte Änderung: Mittwoch, 7. Dezember 2011

Gilt für: SharePoint Server 2010

Inhalt dieses Artikels
Voraussetzungen
Schritt 1: Erstellen des benutzerdefinierten Security Trimmers
Schritt 2: Registrieren des benutzerdefinierten Security Trimmers
Schritt 3 (Optional): Festlegen eines konfigurierbaren Grenzwerts für die Anzahl der überprüften Durchforstungs-URLs

Microsoft SharePoint Server 2010-Suche führt eine Sicherheitskürzung der Suchergebnisse zur Abfragezeit aus. Sie können jedoch auch benutzerdefinierte Sicherheitskürzungen ausführen. SharePoint Server-Suche unterstützt diese Szenarien über die ISecurityTrimmer2-Schnittstelle im Microsoft.Office.Server.Search.Query-Namespace.

Durch die Implementierung dieser Schnittstelle können Sie eine Komponente erstellen, um benutzerdefinierte Sicherheitskürzungen von Suchergebnissen auszuführen, bevor diese an den Benutzer zurückgegeben werden. Der Registrierungsprozess der Sicherheitskürzung ermöglicht die Festlegung von Konfigurationseigenschaften für den benutzerdefinierten Security Trimmer.

Diese exemplarischen Vorgehensweise leitet Sie durch die einzelnen Schritte zur Implementierung, Erstellung, Bereitstellung und Registrierung eines grundlegenden benutzerdefinierten Security Trimmers für SharePoint Server-Suche unter Verwendung von Microsoft Visual Studio 2010. Es wird auch ein optionaler Schritt bereitgestellt, in dem die Implementierung eines konfigurierbaren Grenzwerts für die Anzahl der Inhaltselemente erläutert wird, die von dem Trimmer überprüft werden.

  • Voraussetzungen

  • Schritt 1: Erstellen des benutzerdefinierten Security Trimmers

  • Schritt 2: Registrieren des benutzerdefinierten Security Trimmers

  • Schritt 3 (Optional): Festlegen eines konfigurierbaren Grenzwerts für die Anzahl der überprüften Durchforstungs-URLs

Voraussetzungen

Für diese exemplarische Vorgehensweise muss Folgendes in Ihrer Entwicklungsumgebung installiert sein:

  • Microsoft SharePoint Server 2010

  • Microsoft Visual Studio 2010 oder ein ähnliches Microsoft .NET Framework-kompatibles Entwicklungstool

Schritt 1: Erstellen des benutzerdefinierten Security Trimmers

Für die Erstellung des benutzergefierten Security Trimmers müssen die folgenden Aufgaben ausgeführt werden:

  • Einrichten des Projekts für einen benutzerdefinierten Security Trimmer

  • Erstellen von Code für den benutzerdefinierten Security Trimmer

  • Bereitstellen des Projekts für den benutzerdefinierten Security Trimmer

  • Beispiel

Einrichten des Projekts für einen benutzerdefinierten Security Trimmer

In diesem Schritt erstellen Sie das Projekt für den benutzerdefinierte Security Trimmer und fügen dem Projekt die erforderlichen Verweise und die Klassendatei für den benutzerdefinierten Security Trimmer hinzu.

So erstellen Sie das Projekt für den benutzerdefinierten Security Trimmer

  1. Zeigen Sie in Visual Studio im Menü Datei auf Neu, und klicken Sie auf Projekt.

  2. Wählen Sie in Projekttypen unter C# die Option SharePoint aus.

  3. Wählen Sie unter Vorlagen die Option Leeres SharePoint-Projekt aus. Geben Sie im Feld Name die Zeichenfolge CustomSecurityTrimmerSample ein, und klicken Sie dann auf OK.

  4. Wählen Sie im SharePoint-Anpassungs-Assistent die Option Als Farmlösung bereitstellen aus, und klicken Sie auf Fertig stellen.

So fügen Sie dem Projekt für den benutzerdefinierten Security Trimmer Verweise hinzu

  1. Klicken Sie im Menü Projekt auf Verweis hinzufügen.

  2. Wählen Sie auf der Registerkarte .NET die Verweise mit den folgenden Komponentennamen aus, und klicken Sie auf OK:

    • Microsoft Search-Komponente

      Auf der Registerkarte .NET werden zwei Einträge mit dem Komponentennamen Microsoft Search-Komponente angezeigt. Wählen Sie den Eintrag aus, für den die Spalte Pfad den Eintrag \ISAPI\Microsoft.Office.Server.Search.dll enthält. Wenn dieser Eintrag auf der Registerkarte .NET des Dialogfelds Verweise hinzufügen nicht vorhanden ist, müssen Sie den Verweis über die Registerkarte Durchsuchen unter Verwendung des Pfads zu Microsoft.Office.Server.Search.dll hinzufügen.

    • Microsoft.IdentityModel

      Wenn Microsoft.IdentityModel auf der Registerkarte .NET nicht aufgeführt ist, müssen Sie den Verweise zu Microsoft.IdentityModel.dll über die Registerkarte Durchsuchen unter Verwendung des folgenden Pfads hinzufügen:

      %ProgramFiles%\Reference Assemblies\Microsoft\Windows Identity Foundation\v3.5.

So erstellen Sie die Klassendatei für den Security Trimmer

  1. Klicken Sie im Menü Projekt auf Neues Element hinzufügen .

  2. Klicken Sie unter Visual C#-Elemente in Installierte Vorlagen auf Code, und klicken Sie anschließend auf Klasse.

  3. Geben Sie CustomSecurityTrimmer.cs ein, und klicken Sie auf Hinzufügen.

Erstellen von Code für den benutzerdefinierten Security Trimmer

Ihr benutzerdefinierter Security Trimmer muss die ISecurityTrimmer2-Schnittstelle implementieren. Das Codebeispiel in diesem Abschnitt stellt eine grundlegende Implementierung dieser Schnittstelle dar.

So ändern Sie den Standardcode in "CustomSecurityTrimmer"

  1. Fügen Sie am Anfang der Klasse die folgenden using-Direktiven hinzu:

    using System;
    using System.Collections.Generic;
    using Microsoft.Office.Server.Search.Query;
    using Microsoft.Office.Server.Search.Administration;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Security.Principal;
    
  2. Geben Sie wie folgt an, dass die CustomSecurityTrimmer-Klasse die ISecurityTrimmer2-Schnittstelle in der Klassendeklaration implementiert.

    public class CustomSecurityTrimmer : ISecurityTrimmer2
    

Sie sind jetzt bereit, den Code zur Implementierung der ISecurityTrimmer2-Schnittstellenmethoden zu erstellen.

So implementieren Sie die "ISecurityTrimmer2"-Schnittstellenmethoden

  1. Fügen Sie den folgenden Code für die Initialize()-Methodendeklaration hinzu.

    public void Initialize(NameValueCollection staticProperties, SearchServiceApplication searchApplication)
    {
    
    }
    

    In der Grundversion dieses Beispiels ist kein Code in der Initialize-Methode enthalten. Die Initialize-Methode in Schritt 3 (Optional): Festlegen eines konfigurierbaren Grenzwerts für die Anzahl der überprüften Durchforstungs-URLs enthält eine Beispielimplementierung.

    Weitere Informationen zum Implementieren der Initialize-Methode finden Sie unter Schreiben eines benutzerdefinierten Security Trimmers für die SharePoint Server-Suche.

  2. Fügen Sie den folgenden Code für die CheckAccess()-Methodendeklaration hinzu.

    public BitArray CheckAccess(IList<String> documentCrawlUrls, IDictionary<String, Object> sessionProperties, IIdentity passedUserIdentity)
    {
    //CheckAccess method implementation, see steps 3-5.
    }
    
  3. Deklarieren und initialisieren Sie im ersten Teil der CheckAccess-Methodenimplementierung eine BitArray-Variable, um die Ergebnisse der Zugriffsprüfung für jede URL in der crawlURLs-Sammlung zu speichern, und rufen Sie den Benutzer ab, der die Abfrage übermittelt hat.

    BitArray retArray = new BitArray(documentCrawlUrls.Count);
    //Use passedUserIdentity to get the identity of the user who issued the query.
    //IClaimsIdentity claimsIdentity = (IClaimsIdentity)passedUserIdentity;
    //IClaimsIdentity is defined in Microsoft.IdentityModel.Claims;
    
  4. Durchlaufen Sie jede Durchforstungs-URL in der Auflistung, und führen Sie die Zugriffsprüfung durch, um zu ermitteln, ob der Benutzer, der die Abfrage übermittelt hat, auf das der Durchforstungs-URL zugeordnete Inhaltselement zugreifen kann.

    Wenn der Benutzer auf das Inhaltselement zugreifen kann, legen Sie den Wert des BitArray-Elements bei diesem Index (retArray[x]) auf true fest. Legen Sie den Wert andernfalls wie folgt auf false fest.

    for (int x = 0; x < documentCrawlUrls.Count; x++)
    {
        /*
          To fully implement the security trimmer, add code to perform 
          the security check and determine if the user can access documentCrawlUrls[x]. 
          If the user can access documentCrawlUrls[x], then:
        */
    
            retArray[x] = true;
        //If not:
            retArray[x] = false;
    }
    
  5. Legen Sie den Rückgabewert der CheckAccess-Methode wie folgt auf retArray fest.

    return retArray;
    

Bereitstellen des Projekts für den benutzerdefinierten Security Trimmer

Während des Bereitstellungsvorgangs geschieht Folgendes:

  • Die Datei CustomSecurityTrimmerSample.dll wird erstellt und im globalen Assemblycache bereitgestellt.

  • Internetinformationsdienste (Internet Information Services, IIS) wird wieder verwendet.

So stellen Sie das Projekt für den benutzerdefinierten Security Trimmer bereit

  1. Klicken Sie im Menü Erstellen auf Projektmappe bereitstellen.

  2. Wenn Sie Änderungen an dem Projekt vornehmen, wählen Sie erneut Lösung bereitstellen aus, um die frühere Version der Lösung automatisch zurückzuziehen und mit der neuesten Version zu ersetzen.

Beispiel

Es folgt der vollständige Beispielcode für die in diesem Schritt beschriebene CustomSecurityTrimmerSample-Klasse.

using System;
using System.Collections.Generic;
using Microsoft.IdentityModel;
using Microsoft.IdentityModel.Claims;
using Microsoft.Office.Server.Search.Query;
using Microsoft.Office.Server.Search.Administration;
using System.Collections;
using System.Collections.Specialized;
using System.Security.Principal;

namespace CustomSecurityTrimmerSample
{
    class CustomSecurityTrimmer : ISecurityTrimmer2
    {
        public void Initialize(NameValueCollection staticProperties, SearchServiceApplication searchApplication)
        {
        }

        public BitArray CheckAccess(IList<String> documentCrawlUrls, IDictionary<String, Object> sessionProperties, IIdentity passedUserIdentity)
        {
            BitArray retArray = new BitArray(documentCrawlUrls.Count);
            //Use passedUserIdentity to get the identity of the user who issued the query.
            //IClaimsIdentity claimsIdentity = (IClaimsIdentity)passedUserIdentity;
           //IClaimsIdentity is defined in Microsoft.IdentityModel.Claims;
            for (int x = 0; x < documentCrawlUrls.Count; x++)
            {
              /*
                To fully implement the security trimmer,
                add code to perform the security check 
                and determine if userIdentity can access documentCrawlUrls[x].
                If userIdentity can access documentCrawlUrls[x], then:
               */
                retArray[x] = true;
              //If not:
                retArray[x] = false;
            }
            return retArray;
        }
    }
}

Schritt 2: Registrieren des benutzerdefinierten Security Trimmers

In Schritt 2 wird beschrieben, wie Sie den benutzerdefinierten Security Trimmer konfigurieren. Dieser Schritt umfasst die folgenden Aufgaben:

  • Erstellen der Durchforstungsregel für den benutzerdefinierten Security Trimmer

  • Registrieren des benutzerdefinierten Security Trimmers für die Suchdienstanwendung und erneutes Durchforsten der Inhaltsquelle

Erstellen einer Durchforstungsregel für den benutzerdefinierten Security Trimmer

Bevor Sie den benutzerdefinierten Security Trimmer registrieren, müssen Sie die Durchforstungsregel für den Inhalt erstellen, auf den der benutzerdefinierte Security Trimmer angewendet wird.

So erstellen Sie die Durchforstungsregel

  1. Öffnen Sie die SharePoint 2010-Zentraladministration, und gehen Sie dann zur Seite Anwendungsverwaltung.

  2. Klicken Sie im Abschnitt Dienstanwendungen der Seite Anwendungsverwaltung auf Dienstanwendungen verwalten.

  3. Klicken Sie auf Suchdienstanwendung.

  4. Klicken Sie zum Öffnen der Seite Durchforstungsregeln verwalten im Abschnitt Durchforstung auf Durchforstungsregeln.

  5. Klicken Sie auf Neue Durchforstungsregel, und geben Sie für Pfad Folgendes ein: file://FileServer1/*. Ersetzen Sie FileServer1 durch den Pfad zu dem zu durchforstenden Inhalt.

  6. Wählen Sie für Konfiguration für Durchforstung die Option Alle Einträge in diesem Pfad einschließen aus, und klicken Sie dann auf OK, um die Durchforstungsregel zu erstellen.

Registrieren des benutzerdefinierten Security Trimmers und erneutes Durchforsten der Inhaltsquelle

Verwenden Sie die SharePoint 2010-Verwaltungsshell, um den benutzerdefinierten Security Trimmer zu registrieren. Im folgenden Verfahren wird die Registrierung eines benutzerdefinierten Security Trimmers erläutert, wobei die ID für die Suchdienstanwendung auf 1 festgelegt ist, und der auf Inhalte angewendet wird, die auf Dateifreigaben auf einem Server mit dem Namen FileServer1 gespeichert sind.

So registrieren Sie den benutzerdefinierten Security Trimmer

  1. Gehen Sie in Windows Explorer zu CustomSecurityTrimmerSample.dll im Pfad <Local_Drive>:\WINDOWS\assembly.

  2. Klicken Sie mit der rechten Maustaste auf die Datei, und klicken Sie dann auf Eigenschaften.

  3. Wählen Sie im Dialogfeld Eigenschaften auf der Registerkarte Allgemein das Token aus, und kopieren Sie es.

  4. Öffnen Sie die SharePoint 2010-Verwaltungsshell. Weitere Informationen zur Verwendung dieses Tools finden Sie unter Verwalten von Dienstanwendungen mit der SharePoint 2010-Verwaltungsshell.

  5. Geben Sie an der Eingabeaufforderung den folgenden Befehl ein:

    New-SPEnterpriseSearchSecurityTrimmer -SearchApplication "Search Service Application" 
    -typeName "CustomSecurityTrimmerSample.CustomSecurityTrimmer, CustomSecurityTrimmerSample, 
    Version=1.0.0.0, Culture=neutral, PublicKeyToken=token" -RulePath file://FileServer1/* -id 1
    

    Ersetzen Sie in dem Befehl token durch das öffentliche Schlüsseltoken für die Datei CustomSecurityTrimmerSample.dll, und ersetzen Sie FileServer1 durch den Namen des Servers mit der Dateifreigabe.

    Wichtiger HinweisWichtig

    Wenn Sie mehrere WFE-Server (Web Front-End) besitzen, müssen Sie den Security Trimmer auf allen WFE-Servern in der Farm im globalen Assembycache bereitstellen.

  6. Starten Sie eine vollständige Durchforstung der Inhaltsquelle, wie im folgenden Verfahren erläutert.

    So starten Sie eine vollständige Durchforstung der Inhaltsquelle

    1. Öffnen Sie die SharePoint 2010-Zentraladministration, und gehen Sie dann zur Seite Anwendungsverwaltung.

    2. Klicken Sie im Abschnitt Dienstanwendungen der Seite Anwendungsverwaltung auf Dienstanwendungen verwalten.

    3. Klicken Sie auf Suchdienstanwendung.

    4. Klicken Sie zum Öffnen der Seite Inhaltsquellen verwalten im Abschnitt Durchforstung auf Inhaltsquellen.

    5. Klicken Sie für die Inhaltsquelle, die den von der Durchforstungsregel für den Security Trimmer betroffenen Inhalt darstellt, auf den Pfeil neben dem Menü Bearbeiten. Wählen Sie im Menü Vollständige Durchforstung starten aus. Wenn die Inhaltsquelle auf der Seite Inhaltsquellen verwalten nicht aufgeführt ist, müssen Sie diese erstellen.

      So erstellen Sie eine Inhaltsquelle

      1. Klicken Sie auf Neue Inhaltsquelle, und geben Sie unter Name den Namen der Inhaltsquelle ein.

      2. Klicken Sie für Inhaltsquellentyp auf Dateifreigaben.

      3. Geben Sie für Startadressen den Pfad file://FileServer1/* ein.

      4. Aktivieren Sie Vollständige Durchforstung der Inhaltsquelle starten, und klicken Sie dann auf OK, um die Inhaltsquelle hinzuzufügen.

Schritt 3 (Optional): Festlegen eines konfigurierbaren Grenzwerts für die Anzahl der überprüften Durchforstungs-URLs

Wenn Sie einen benutzerdefinierten Security Trimmer unter Verwendung der SharePoint-Verwaltungsshell registrieren, können Sie optionale Konfigurationseigenschaften mit dem New-SPEnterpriseSearchSecurityTrimmer-Cmdlet festlegen. Dieses Cmdlet unterstützt die Erstellung eines benutzerdefinierten Security Trimmers mit konfigurierbaren Einstellungen.

Beispielsweise könnten Sie einen benutzerdefinierten Security Trimmer mit einem konfigurierbaren Grenzwert für die Anzahl der durch den Security Trimmer geprüften Elemente erstellen. Auch wenn dies optional ist, empfehlen wir die Einfügung eines gewissen Grenzwerts in die Implementierung des benutzerdefinierten Security Trimmers. Weitere Informationen finden Sie unter Schreiben eines benutzerdefinierten Security Trimmers für die SharePoint Server-Suche.

In Schritt 3 wird die Erstellung und Registrierung eines benutzerdefinierten Security Trimmers mit einem konfigurierbaren Grenzwert für die Anzahl der zu überprüfenden Dokumente erläutert. Dies umfasst die folgenden Aufgaben:

  • Codieren des benutzerdefinierten Security Trimmers

  • Registrieren des benutzerdefinierten Security Trimmers

  • Beispiel

Der in diesem Beispiel erläuterte benutzerdefinierte Security Trimmer entspricht dem in Schritt 1: Erstellen des benutzerdefinierten Security Trimmers und Schritt 2: Registrieren des benutzerdefinierten Security Trimmers erläuterten. In diesen benutzerdefinierten Security Trimmer werden jedoch zusätzliche Schritte eingefügt, um in der Implementierung einen Grenzwert festzulegen und den Befehl zu ändern, der für die Registrierung des benutzerdefinierten Security Trimmers verwendet wird.

Codieren des benutzerdefinierten Security Trimmers

Bevor Sie mit der hier erläuterten Aufgabe beginnen, erstellen Sie ein Projekt für einen benutzerdefinierten Security Trimmer, und ändern Sie die CustomSecurityTrimmer-Klasse, wie in Schritt 1: Erstellen des benutzerdefinierten Security Trimmers erläutert.

So codieren Sie den benutzerdefinierten Security Trimmer

  1. Nachdem Sie die Klassendeklaration für die Implementierung der ISecurityTrimmer2-Schnittstelle geändert haben, deklarieren Sie folgendermaßen eine Variable für den Grenzwert.

    class CustomSecurityTrimmer : ISecurityTrimmer2
    {
        /*
           Sets a default limit of 200. You can change this 
           to a value that meets your specific requirements.
        */ 
        private int intCheckLimit = 200;
    
  2. Erstellen Sie eine Methode, um die Anzahl der überprüften Elemente mit dem konfigurierten Grenzwert zu vergleichen, und erstellen Sie den folgenden Code.

    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. Um den Code für das Beispiel des benutzerdefinierten Security Trimmers zu erstellen, müssen Sie die unter Schritt 1: Erstellen des benutzerdefinierten Security Trimmers erläuterten Implementierungen der Methoden Initialize() und CheckAccess() ändern.

So ändern Sie die "ISecurityTrimmer2"-Schnittstellen-Methodenimplementierungen

  1. Fügen Sie der Initialize()-Methode den folgenden Code hinzu:

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

    Dieser Code legt den Grenzwert für die maximale Anzahl von Dokumenten, die der Security Trimmer überprüft, auf den Wert einer Konfigurationseigenschaft mit dem Namen CheckLimitProperty fest.

    HinweisHinweis

    Sie können Konfigurationseigenschaften während der Registrierung des Security Trimmers festlegen.

  2. Fügen Sie der CheckAccess()-Methode den folgenden Code unmittelbar nach der Methodendeklaration hinzu.

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

    Dieser Code ruft die CheckLimit-Methode auf. Wenn der Grenzwert erreicht wurde, gibt die Methode false zurück. Tritt dies ein, wird eine PluggableAccessCheckException-Ausnahme ausgelöst. Dem Benutzer wird die im Konstruktor angegebene Meldung jedoch nicht angezeigt. Nach dem Auslösen der Ausnahme durch den Security Trimmer wird die trimmerID, die die Ausnahme bewirkt hat, herausgefiltert, und dieses Ergebnis wird aus den Suchergebnissen ausgeschlossen. Andere dem Security Trimmer unterliegende Ergebnisse werden, sofern vorhanden, zurückgegeben und im Fenster mit den Suchergebnissen angezeigt.

HinweisHinweis

In diesem Abschnitt werden keine bereits in Schritt 1 und 2 erläuterten Schritte wiederholt. Es werden nur die abweichenden Aufgaben erläutert. Weitere Informationen finden Sie unter Schritt 1: Erstellen des benutzerdefinierten Security Trimmers und Schritt 2: Registrieren des benutzerdefinierten Security Trimmers.

Registrieren des benutzerdefinierten Security Trimmers

Bevor Sie mit diesem Schritt beginnen, müssen Sie die Datei CustomSecurityTrimmerSample.dll im globalen Assemblycache bereitstellen, wie unter Schritt 2: Registrieren des benutzerdefinierten Security Trimmers erläutert. Anschließend können Sie den benutzerdefinierten Security Trimmer unter Verwendung der SharePoint 2010-Verwaltungsshell registrieren.

Im folgenden Verfahren wird die Registrierung eines benutzerdefinierten Security Trimmers erläutert, wobei die ID für die Suchdienstanwendung auf 1 festgelegt ist, und der auf Inhalte angewendet wird, die in Dateifreigaben auf einem Server mit dem Namen FileServer1 gespeichert sind. Weiterhin wird der Wert der CheckLimitProperty-Konfigurationseinstellung auf 300 festgelegt.

So registrieren Sie den benutzerdefinierten Security Trimmer bei der "CheckLimitProperty"-Konfigurationseinstellung

  1. Öffnen Sie die SharePoint 2010-Verwaltungsshell. Weitere Informationen zur Verwendung dieses Tools finden Sie unter Verwalten von Dienstanwendungen mit der SharePoint 2010-Verwaltungsshell.

  2. Geben Sie an der Eingabeaufforderung den folgenden Befehl ein:

    New-SPEnterpriseSearchSecurityTrimmer -SearchApplication "Search Service Application" 
    -typeName "CustomSecurityTrimmerSample.CustomSecurityTrimmer, CustomSecurityTrimmerSample, 
    Version=1.0.0.0, Culture=neutral, PublicKeyToken=token" 
    -RulePath file:// FileServer1/* -id 1 -properties CheckLimitProperty~300
    

    Ersetzen Sie in dem Befehl token durch das öffentliche Schlüsseltoken für die Datei CustomSecurityTrimmerSample.dll, und ersetzen Sie FileServer1 durch den Namen des Servers mit der Dateifreigabe.

Beispiel

Es folgt der vollständige Beispielcode für die in diesem Schritt beschriebene CustomSecurityTrimmerSample-Klasse.

using System;
using System.Collections.Generic;
using Microsoft.Office.Server.Search.Query;
using Microsoft.Office.Server.Search.Administration;
using System.Collections;
using System.Collections.Specialized;
using System.Security.Principal;

namespace CustomSecurityTrimmerSample
{
    class CustomSecurityTrimmer : ISecurityTrimmer2
    {
        /*        
        Sets a default limit of 200. You can change this 
        to a value that meets your specific requirements.
        */ 
        private int intCheckLimit = 200;

        public void Initialize(NameValueCollection staticProperties, SearchServiceApplication searchApplication)
        {
            if (staticProperties["CheckLimitProperty"] != null)
            {
               intCheckLimit = Convert.ToInt32(staticProperties["CheckLimitProperty"]);
            }

        }

        public BitArray CheckAccess(IList<String> documentCrawlUrls, IDictionary<String, Object> sessionProperties, IIdentity passedUserIdentity)
        {
            if (!this.CheckLimit(sessionProperties, documentCrawlUrls.Count))
            {
                throw (new PluggableAccessCheckException("<Display Message>"));
            }

            BitArray retArray = new BitArray(documentCrawlUrls.Count);
            IIdentity userIdentity = System.Threading.Thread.CurrentPrincipal.Identity;

            for (int x = 0; x < documentCrawlUrls.Count; x++)
            {
              /*
                To fully implement the security trimmer,
                add code to perform the security check 
                and determine if userIdentity can access documentCrawlUrls[x].
                If userIdentity can access documentCrawlUrls[x], then:
               */
                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;
            }
        }
    }
}

Siehe auch

Referenz

Microsoft.Office.Server.Search.Query.ISecurityTrimmer2

Microsoft.Office.Server.Search.Query.PluggableAccessCheckException

Konzepte

Schreiben eines benutzerdefinierten Security Trimmers für die SharePoint Server-Suche